利益:
- ドメイン知識を使用して意味のある派生特徴を生成し、適切な方法 (ワンホット、ラベル、ターゲット) でカテゴリカテゴリをエンコードする機能
- モデルタイプ(標準化、正規化)に従って数値変数をスケーリングし、不必要または不完全なスケーリングを回避する機能
- トレーニングとテストの分割後、トレーニングからのみすべての変換を学習することで、機能漏洩を回避する機能
機械学習には、「応用機械学習は本質的に特徴量エンジニアリングである」という古い格言があります。なぜなら、モデルの成功は多くの場合、どのアルゴリズムを選択するかではなく、モデルにどのような入力を与えるかによって決まるからです。特徴エンジニアリングは、モデルが学習できる生データから意味のある信号を生成する技術です。この段階では、人工知能は豊富なアイデアの源です。「このデータからどのような機能を生成できるか」と尋ねると、数十の提案がリストされます。しかし、これらの提案の中には、価値のあるものもあれば、役に立たないものもあれば、危険なもの (漏洩) もあるかもしれません。それを整理するのはあなたの仕事です。
特徴エンジニアリングを行う理由
生データが最良の形式でモデルに提供されることはほとんどありません。 「生年月日」列だけでは意味がありませんが、そこから生成される「年齢」値は強力なシグナルとなります。 「注文タイムスタンプ」から「曜日」「昼夜」「休日かどうか」などの属性を抽出できます。 2 つの列を結合して比率 (「負債/収入比率」) を算出できます。ここで、特徴量エンジニアリングはドメインの知識を数学的な信号に変換します。だからこそ、人間の知性が最も問われる舞台なのです。
カテゴリ変数を数値に変換: コーディング
モデルは通常、テキストではなく数値を処理します。カテゴリ変数 (都市、色、製品タイプなど) を数値に変換することをエンコードと呼びます。一般的な 3 つの方法:
ワンホット エンコーディング: カテゴリごとに値 0/1 を持つ個別の列を開きます。 「都市」については、イスタンブール、アンカラ、イズミルの列が形成されます。顧客がイスタンブール出身の場合、その列のみが 1 になります。カテゴリの数が少ない場合に最適です。カテゴリが多すぎると、何百もの列が生成されます (これを「サイズ爆発」と呼びます)。
ラベルエンコーディング: 各カテゴリーに番号を与えます (イスタンブール=0、アンカラ=1)。これは単純ですが、誤ってモデルにシーケンス (アンカラ > イスタンブールなど) を教えてしまう可能性があります。したがって、順序付けされていないカテゴリでは注意して使用されます。
ターゲット エンコーディング: 各カテゴリをそのカテゴリ内のターゲット変数の平均に置き換えます。これは非常に強力ですが、最も危険な漏洩源です。テスト データのターゲットを考慮すると、モデルは将来を見据えています。トレーニング データのみから慎重に (相互検証内で) 計算する必要があります。
スケーリング: 大きな数値がモデルを圧倒しない
一部のモデル (距離ベースのモデル、線形モデル、ニューラル ネットワーク) は変数のスケールに敏感です。 「収入」(0 ~ 500,000)と「年齢」(0 ~ 100)が同じパターンに該当する場合、収入が大きいというだけの理由で収入が優勢になる可能性があります。スケーリングによりこれが修正されます。一般的な 2 つの方法: 標準化 (各値を「平均からどれだけ標準偏差離れているか」に変換する) と正規化 (最小-最大の正規化 - 値を 0 ~ 1 の範囲に圧縮する)。ツリーベースのモデル (デシジョン ツリー、ランダム フォレスト) はスケールに依存せず、スケーリングを必要としません。
注意: スケーリングおよびコーディングパラメータ (平均、標準偏差、カテゴリ平均マッピング) はトレーニング データからのみ計算する必要があり、その後、同じことをテスト データに適用する必要があります。テスト データを含めることは漏洩であり、モデルが実際よりも良く見えます。
特徴量エンジニアリングにおける漏洩の核心
特徴生成は、データ漏洩が最も頻繁に発生する場所です。 2 つの典型的な間違い: 時間リーク — 将来の情報 (「過去 30 日間の平均」を計算するときの予測日以降の日数を含む) を含む特徴を作成します。統計漏洩 — トレーニング/テスト分割の前に、すべてのデータから特徴 (スケーリング平均、ターゲット エンコード値) を計算します。ルール: トレーニング/テスト分割を最初に実行した後、トレーニング データのみから各変換を学習します。これを定期的に行う最も安全な方法は、パイプラインを使用することです。これは、すべての変換を 1 つのチェーンに収集し、分割後に適用する構造です。
方法
何のために
漏洩の危険性
メモ
ワンホットエンコーディング
カテゴリが少ない変数
低い
複数のカテゴリーでサイズを爆発的に拡大
ラベルコーディング
分類されたカテゴリ
低い
順序が間違っていると間違った順序が教えられる
ターゲットエンコーディング
マルチカテゴリー、強力な信号
非常に高い
学歴だけでも履歴書でも
標準化
線形/距離モデル
中程度
パラメータは教育のみに依存します
タイムウィンドウ機能
時系列
高い
未来を追加する
ミニケース3個
ケース 1 — 貴重な財産。クレジット チームは、生の「月収」列と「月々の負債支払額」列から「負債対収入比率」特徴を生成しました。この 1 つの派生特徴により、モデルの精度が 71% から 79% に向上しました。なぜなら、実際にリスクを決定するのは絶対収入ではなく利率だったからです。教訓: ドメイン知識によって生成される比率は強力なシグナルです。
ケース 2 — ターゲットのエンコード リーク。あるチームは、「郵便番号」をターゲット エンコーディング (その地域の平均チャーン レート) を使用して数値に変換しましたが、分割する前にすべてのデータから変換しました。このモデルはテスト セットでは 94% の成績を達成しましたが、実稼働環境では 68% に低下しました。 6週間の努力が無駄になりました。教訓: ターゲットのコーディングはトレーニング内でのみ慎重に行われます。
ケース 3 — スケーリングの忘却。あるアナリストは、スケーリングせずに、収益 (0 ~ 400,000) と顧客の年齢 (18 ~ 75 歳) を距離ベースのモデルに入力しました。モデルはほぼ収入のみを考慮し、年齢の影響を打ち消しました。スケーリングが追加されると、セグメンテーションが意味を持つようになります。教訓: 距離/線形モデルではスケーリングは無視されません。
コピー可能な 4 つのテンプレート
1) 機能のアイデアの生成 (削除はあなた次第です):
あなたの役割: 機能エンジニアリングアシスタント。私の df 列:birth_date、order_time (タイムスタンプ)、income_tl、debt_tl、city、product_category。ターゲット: 「ローンは返済されるかどうか」(0/1)。これらの列から生成できる 15 個の特徴を提案します。それぞれの漏洩リスク(低/中/高)を指定します。将来の情報を含むものには明確にマークを付けます。
2) セキュアコーディング (分割後):
「city」と「product_category」をワンホット エンコードするコードを作成します。重要: エンコーディングをトレーニング データにのみ適合させてから、テスト データを変換します (sklearn OneHotEncoder を使用)。教育において目に見えないカテゴリ (handle_unknown) をどのように扱うかを説明します。
3) パイプラインによるリークのない変換:
sklearn パイプラインを設定します。StandardScaler を数値列に適用し、OneHotEncoder をカテゴリ列に適用し、最後に分類子を追加します。すべての変換がトレーニングとテストの分割後、トレーニングからのみ学習されることを保証します。コードとリークがない理由を説明します。
4) タイムウィンドウ機能 (漏れ制御):
各顧客の「過去 30 日間の注文数」属性を生成しますが、予測日以降のデータは決して含めないでください。コードが将来を見据えていないことを 1 行ずつ説明します。基準日欄を記載させていただきます。
弱いプロンプト / 強いプロンプト
弱いプロンプト:
このデータに適切なプロパティを追加します。
「良好」は定義されておらず、目標も不明確で、漏れ管理もありません。 AI はランダムな、おそらくリーキーな特徴を生成します。
強力なプロンプト:
あなたの役割: 機能エンジニア。ターゲット:「30 日以内の解約」(0/1)、推定基準日: save_date。 df にはトランザクション履歴があります。タスク: 8 つの特徴を生成し、それぞれについて「予測時にこの情報を持っているか」という質問に答えます。タイムウィンドウ機能の基準日の後に日付を追加します。パイプラインと互換性のある方法でコードを作成し、トレーニング/テスト セクションの後に実行されるようにします。
ここでは、目標、基準時間、漏れ制御が最初から定義されています。
よくある間違い
- 除算前のすべてのデータから変換を学習します。スケーリング/エンコーディング パラメータがテスト データを参照すると、リークが発生します。
- ターゲットコーディングの不注意な使用。これは最も強力ですが、最も漏洩の多い方法です。トレーニングからだけ、相互検証で。
- タイムウィンドウ機能で未来を追加します。 「過去 30 日間」の計算が予測日の後に入力された場合、モデルは将来を認識します。
- ツリー モデルでの不必要なスケーリングと線形モデルでの不完全なスケーリング。スケーリングはモデル タイプに応じて決定されます。
- AI のあらゆる機能の提案を疑問なく追加します。提案には、役に立たない機能や漏えい機能が含まれる場合があります。
ヒント: 生成する特徴ごとに、「予測を行った時点で持っている情報を使用してこの値を計算できますか?」という質問を 1 つ書き留めます。答えが明確に「はい」でない場合は、この機能を使用しないでください。この 1 つの規律により、ほとんどの機能関連のリークが排除されます。
要約すれば
特徴量エンジニアリングは、生データから意味のある信号を生成する技術であり、多くの場合、アルゴリズムよりもモデルの成功を決定します。カテゴリカルのエンコード (ワンホット、ラベル、ターゲット)、数値のスケーリング (標準化、正規化)、およびドメイン知識を使用した派生特徴の生成が基本的なツールです。しかし、このフェーズは漏洩の中心でもあります。すべての変換はトレーニング/テスト分割後に、トレーニング データからのみ学習する必要があります。 AI は多くのアイデアを生み出します。価値のあるものと危険なものを区別するのは人間の判断です。
アプリケーションタスク
ターゲット変数を選択し、列から少なくとも 5 つの派生特徴を設計します。それぞれについて、「予測時に空いているか」という質問に書面で回答し、少なくとも 1 つを「漏洩のリスクが高い」として除外します。次に、パーティション後に実装される安全な機能をパイプラインにコーディングします。
チェックリスト
- [ ] トレーニングとテストの分割後にすべての変換を適用しましたか?
- [ ] スケーリング/エンコーディングパラメータはトレーニングからのみ学習しましたか?
- [ ] 各機能の「予測時にそれを持っているか」という質問に答えましたか?
- [ ] ターゲットコーディングなどのリスクの高い手法に特別な注意を払っていますか?
- [ ] モデル タイプ (ツリー/リニア) に合わせて適切にスケーリングすることを決定しましたか?