🚧 本アプリは現在開発中です。公開・リリース時期は決まり次第お知らせします。
目次(データマイニング入門

基礎編

特徴量エンジニアリング

モデルに渡す「材料」の作り方。集約・比率・差分・時間窓という型と、次元の呪い、重要度の読み方。

この記事の要点

  • 特徴量は、生データをモデルが読める「材料」に直したものです。ここに詳しい人の知識がいちばん効きます。
  • 作り方には型があります。集約・比率・差分・時間窓・フラグ化を覚えると、たいていの発想はこの組み合わせで書けます。
  • 闇雲に増やしても良くなりません。件数に対して列が多すぎると、偶然の一致を拾いやすくなります。

特徴量とは何か

特徴量(feature)とは、モデルに渡す入力列のことです。 生のデータをそのまま渡すことはめったになく、「予測に効きそうな形」に加工して渡します。 たとえば「登録日」という日付をそのまま渡しても意味は薄いですが、 「登録からの経過日数」に直すと途端に効き始めます。

アルゴリズムの選択より、この工程のほうが結果への影響が大きいことがよくあります。 そしてここだけは、その分野を知っている人が強い領域です。 何が結果を左右するかという当たりを付けられるからです。

作り方の型

やること
集約グループごとにまとめる(件数・平均・最大)顧客ごとの過去の購入回数
比率2 つの値の割り算にする成功回数 ÷ 試行回数(成功率)
差分前回との差、基準との差をとる前月比、平均からのズレ
時間窓直近 N 回・N 日に限って集計する直近 3 か月の利用回数
フラグ化条件に当てはまるかを 0/1 で表す初回利用かどうか、欠損だったかどうか

比率と差分は特に強力です。絶対値のままでは比べられないものを、 比べられる形に直してくれるからです。 「10 回中 3 回成功」と「100 回中 30 回成功」は、回数で見ると別物ですが、 率で見ると同じ、しかし信頼度は違う ── といった判断もしやすくなります。

集約特徴量は「いつまでのデータで作るか」に注意

過去の実績を集計した特徴量は効きますが、集計に使う期間を間違えると、未来の情報が混ざります。 たとえば「その人の全期間の成功率」を特徴量にすると、 予測しようとしている出来事の結果まで平均に含まれてしまいます。

正しくは「その時点より前のデータだけ」で集計します。 地味ですが、これを守るかどうかで検証結果の意味がまったく変わります。詳しくは学習と検証の「データリーク」を参照してください。

増やせば良くなるわけではない(次元の呪い)

特徴量の数(次元)が増えると、データ点はどんどん「まばら」になります。 すると偶然の一致で当たっている組み合わせが見つかりやすくなり、 学習データでは良い成績が出るのに、新しいデータではまるで当たらない、 という状態に近づきます。

対処は単純です。

  • 意味の説明できない特徴量は入れない
  • ほとんど同じ情報を持つ列(強く相関する列)は片方に絞る
  • 入れた/抜いたで検証成績がどう動くかを見て決める

特徴量重要度は「原因」ではない

多くのモデルは、どの特徴量をよく使ったかを重要度として出せます。 これは解釈の助けになりますが、重要度が高い=それが原因、ではありません。 単に結果と一緒に動いているだけの列や、 たまたま細かく分岐しやすい列(値の種類が多い列)が上位に来ることもあります。

重要度は「モデルがどこを見ているかのヒント」として使い、 因果の話をするときは相関と因果の区別に立ち返ってください。