連載「家庭OS」 第7回 / 全13回

気づかず払い続けている課金を、家計データから自動で炙り出す


家計まわりの最終回は、いちばん即効性のある道具を。気づかないうちに払い続けている定期課金を、家計データから自動で洗い出す棚卸しだ。

サブスクは「増やすときは意識的、やめるときは無意識」で、止めるのを忘れがちな出費の代表だ。だから人間の記憶ではなく、データに探させることにした。


「同じ額が毎月出ている」を機械的に拾う

考え方はシンプルで、定期課金は同じ相手に・同じ額が・定期的に出ていく、という性質を使う。

家計簿の支出ログを、摘要(支払先の名前)と金額の組み合わせでグルーピングして、

  • 同じ額が3か月以上出ているもの → 月次課金の疑い
  • だいたい12か月間隔で出ているもの → 年次課金の疑い

として拾い上げる。これだけで「自分が今いくつのサブスクを、月いくら払っているか」の一覧が勝手にできる。

難しいのは「ノイズをどう落とすか」

ただ、素直にやると定期課金じゃないものが大量に混ざる。コンビニも自販機も、毎月だいたい同じくらい使っていれば「定期的な同額支出」に見えてしまう。

そこで2段でノイズを落としている。ひとつは、コンビニ・自販機・ATM・税金みたいに明らかに課金ではないカテゴリを除外すること。もうひとつが支配率という考え方で、「その支払先の取引が、特定の1つの金額にどれだけ集中しているか」を見る。本物のサブスクは毎回ぴったり同じ額(その金額への集中度が高い)。コンビニは金額がばらつく(集中度が低い)。集中度が一定以下のものは、定期課金候補から落とす。

地味だが、この「機械的に拾う」と「人間の常識でノイズを削る」の組み合わせが、使える一覧になるかどうかの分かれ目だった。

同じサービスを、あえてマージしない

ひとつ意図的にやっていないことがある。同じサービスでも表記が違う行(たとえば半角カナ表記と英字表記)を、自動で1つにまとめない。両方そのまま表示する。

なぜなら、表記が分かれている=支払方法を切り替えた跡や、二重課金の手がかりだからだ。クレジットカードを変えたつもりで旧カードでも課金が続いている、みたいなことは、ここで両方並んで初めて気づく。きれいにまとめると、その異常がかえって見えなくなる。

継続中か止まったかの判定も、全体の最新月ではなく口座ごとの最新月で見ている。カード明細は反映が遅いので、口座ごとに見ないと「まだ生きている課金」を「もう止まった」と誤判定してしまう。

「要るか要らないか」は人間が決める

ここまでやっても、ツールは**「これは要らない」とは言わない**。データからは「払い続けている」ことしか分からず、「使っているか」はわからないからだ。月額を払っているサービスを実際に使っているかどうかは、本人にしか判定できない。

だから道具の役割は、判断のテーブルに候補を並べるところまで。投資のナビで「判断ではなく判断材料を用意する」と書いたのと、まったく同じ線引きだ。並べてくれれば、あとは「これは満足度が高いから残す」「これは惰性だから切る」と自分で選べる。

使っている技術

アルゴリズム自体はシンプルで、家計の支出ログを (正規化した摘要, 金額) でグルーピングし、同額が3か月以上 or 約12か月間隔で出るものを定期課金とみなすPython。技術的に効いているのは2つの前処理だ。

ひとつは摘要のNFKC正規化——半角カナと全角英字の表記揺れを畳んで、同じ店を同じものとして扱う(ただし”同じサービスの別表記”はあえてマージせず両方残す=二重課金の発見ポイント)。もうひとつが支配率で、「その支払先の取引が特定の1金額にどれだけ集中しているか」を計算し、しきい値で足切りしてコンビニのような変動費を弾く。継続/停止の判定は、カード明細の反映ラグを避けるため口座ごとの最新月を基準にしている。地味な正規化と統計の合わせ技で、使える一覧になるかが決まる。

記録メモ: 節約術というと「我慢して減らす」イメージだけど、棚卸しでいちばん効くのは我慢ではなく可視化だった。払っていること自体を忘れているものは、見えた瞬間にノーリスクで切れる。気合より、月初に一覧が出てくる仕組みのほうがずっと続く。

これで家計・投資のレイヤーはひと区切り。次回からは子育てのレイヤーに移って、「週末の過ごし方を、選択肢を出さず1案だけ言い切って届ける」ちょっと変わった道具の話を書く。