「ゴミを入れればゴミが出る」ということわざを聞いたことがあるでしょう。このことわざは、機械学習モデルのトレーニングにまさに当てはまります。関連性のないデータを使用して機械学習モデルをトレーニングすると、最高の機械学習アルゴリズムでもあまり役に立ちません。逆に、よく設計された意味のある特徴を使用すれば、単純な機械学習アルゴリズムでも優れたパフォーマンスを実現できます。では、モデルのパフォーマンスを最大化するこれらの意味のある特徴をどのように作成すればよいのでしょうか。その答えは、特徴エンジニアリングです。特徴エンジニアリングに取り組むことは、回帰、決定木、サポートベクターマシンなど、数値入力を必要とする従来の機械学習アルゴリズムを使用する場合に特に重要です。ただし、これらの数値入力の作成は、データスキルだけの問題ではありません。創造性とドメイン知識が要求され、科学と同じくらい芸術的なプロセスです。
大まかに言えば、特徴エンジニアリングは 2 つの要素に分けられます。1) 新しい特徴を作成すること、2) これらの特徴を処理して、検討中の機械アルゴリズムで最適に機能するようにすることです。この記事では、横断的、構造化された、非 NLP データセットの特徴エンジニアリングのこれら 2 つの要素について説明します。
生データの収集は大変な作業です。この作業が終わる頃には、追加の機能の作成に時間とエネルギーを費やすのが億劫になってしまうかもしれません。しかし、ここで、すぐにモデルのトレーニングに飛び込みたいという誘惑に抗う必要があります。その価値は十分にあるとお約束します。この段階で、立ち止まって、「自分のドメイン知識に基づいて手動で予測を行うとしたら、どのような機能があればうまくいっただろうか」と自問する必要があります。この質問をすることで、モデルが見逃していたかもしれない新しい意味のある機能を作成する可能性が開けるかもしれません。どのような追加機能が役立つかを検討したら、以下の手法を利用して生データから新しい機能を作成できます。
名前が示すように、この手法は複数のデータ ポイントを組み合わせて、より総合的なビューを作成するのに役立ちます。通常、カウント、合計、平均、最小値、最大値、パーセンタイル、標準偏差、変動係数などの標準関数を使用して、連続した数値データに集計を適用します。各関数はさまざまな情報要素をキャプチャできますが、使用する最適な関数は特定のユース ケースによって異なります。多くの場合、問題のコンテキストで意味のある特定の時間またはイベント ウィンドウに集計を適用できます。
特定のクレジットカード取引が不正かどうかを予測する例を見てみましょう。このユースケースでは、取引固有の機能を使用することは間違いありませんが、それらの機能と並行して、次のような集約された顧客レベルの機能を作成することもメリットになります。
過去 5 年間に顧客が詐欺被害に遭った回数: 以前に複数回詐欺被害に遭った顧客は、再び詐欺被害に遭う可能性が高くなります。したがって、この集約された顧客レベルのビューを使用すると、適切な予測シグナルを提供できます。
過去 5 回の取引金額の中央値: クレジットカードが不正使用されると、詐欺師はカードをテストするために複数の低額取引を試みることがよくあります。1 回の低額取引は非常に一般的であり、詐欺の兆候ではない可能性がありますが、短期間に連続して多数のこのような取引が見られる場合、クレジットカードが不正使用されている可能性があります。
多くの種類の問題では、設定されたパターンの変化は予測や異常検出にとって貴重なシグナルとなります。差異と比率は、数値特徴の変化を表す効果的な手法です。集計と同様に、これらの手法を問題のコンテキストで意味のある時間枠に適用することもできます。
例:
過去 1 時間の新規加盟店取引の割合と過去 30 日間の新規加盟店取引の割合の差: 短期間に連続して発生する新規加盟店取引の割合が高い場合、それ自体が不正リスクを示している可能性がありますが、この行動が顧客の過去の行動と比較して変化していることがわかれば、さらに明らかなシグナルになります。
現在の取引件数と過去 30 日間の 1 日あたりの平均取引件数の比率: クレジットカードが不正使用されると、短期間に多数の取引が行われる可能性が高く、過去のクレジットカードの使用状況と一致しない場合があります。現在の取引件数と過去 30 日間の 1 日あたりの平均取引件数の比率が著しく高い場合は、不正使用パターンを示している可能性があります。
年齢計算技術を使用すると、2 つのタイムスタンプまたは日付の差を計算することで、日付またはタイムスタンプの特徴を数値特徴に変換できます。また、特徴値に関連付けられた保有期間が予測にとって貴重なシグナルとなる場合は、この技術を使用して、特定の非数値特徴を意味のある数値特徴に変換することもできます。
例:
インジケータ機能またはブール機能には、バイナリ値 {1, 0} または {True, False} があります。インジケータ機能は非常に一般的で、さまざまな種類のバイナリ情報を表すために使用されます。場合によっては、このようなバイナリ機能が数値形式ですでに存在することがありますが、他の場合には数値以外の値を持つことがあります。モデルのトレーニングに数値以外のバイナリ機能を使用するには、それらを数値にマッピングするだけです。
インジケーター機能のこれらの一般的な使用法を超えて、インジケーター エンコーディングを、非数値データ ポイント間の比較を表すツールとして活用できます。この属性により、非数値機能の変化を測定する方法が作成されるため、特に強力になります。
例:
最近のログイン イベントでの検証の失敗: 最近のログイン イベントの失敗は、不正なトランザクションのリスクが高いことと関連している可能性があります。この場合、生データにはこの機能の Yes または No の値がある可能性があります。ここで行う必要があるのは、これらの値を 1 または 0 にマッピングすることだけです。
最後の取引からの国の場所の変更: 国の場所の変更は、クレジットカードが侵害されたことを示している可能性があります。ここでは、非数値機能「国の場所」の変更を表すインジケーター機能を作成することで、この国の変更情報を取得します。
この手法は、特徴データが数値または非数値のカテゴリ形式である場合に適用できます。数値カテゴリ形式とは、地理的地域コード、店舗 ID、その他の同様のタイプのデータなど、非連続または非測定データを含む数値データを指します。1 つのホット エンコーディング手法により、このような特徴を、機械学習モデルのトレーニングで使用できるインジケーター特徴のセットに変換できます。カテゴリ特徴に 1 つのホット エンコーディングを適用すると、そのカテゴリ変数のすべてのカテゴリに対して 1 つの新しいバイナリ特徴が作成されます。カテゴリの数が増えると新しい特徴の数も増えるため、この手法はカテゴリの数が少ない特徴、特にデータセットが小さい場合に適しています。標準的な経験則の 1 つは、カテゴリごとに少なくとも 10 件のレコードがある場合にこの手法を適用することを推奨しています。
例:
この手法は、ワンホット エンコーディングを適用するのと同じタイプの特徴に適用されますが、ワンホット エンコーディングに比べていくつかの利点と欠点があります。カテゴリの数が多い (カーディナリティが高い) 場合、ワンホット エンコーディングを使用すると、望ましくない特徴の数が増え、モデルの過剰適合につながる可能性があります。ターゲット エンコーディングは、教師あり学習の問題に取り組んでいる場合に効果的な手法です。これは、各カテゴリ値をそのカテゴリのターゲットの期待値にマッピングする手法です。連続ターゲットを持つ回帰問題に取り組んでいる場合、この計算により、カテゴリがそのカテゴリの平均ターゲット値にマッピングされます。バイナリ ターゲットを持つ分類問題の場合、ターゲット エンコーディングにより、カテゴリがそのカテゴリの正のイベント確率にマッピングされます。ワンホット エンコーディングとは異なり、この手法には特徴の数が増えないという利点があります。この手法の欠点は、教師あり学習の問題にしか適用できないことです。この手法を適用すると、特に一部のカテゴリの観測数が少ない場合に、モデルが過剰適合しやすくなる可能性もあります。
例:
生データから新しい特徴を作成したら、次のステップは、最適なモデル パフォーマンスを得るためにそれらを処理することです。これは、次のセクションで説明する特徴処理によって実現します。
特徴処理とは、機械学習モデルが意図したとおりにデータに適合することを保証する一連のデータ処理手順を指します。これらの処理手順の一部は、特定の機械学習アルゴリズムを使用するときに必要ですが、その他の処理手順は、検討中の特徴と機械学習アルゴリズムの間で良好な相性を実現できるようにします。このセクションでは、一般的な特徴処理手順と、それが必要な理由について説明します。
いくつかの機械学習アルゴリズム、特に回帰モデルなどのパラメトリック アルゴリズムは、外れ値によって深刻な影響を受けます。これらの機械学習アルゴリズムは外れ値に対応しようとしますが、モデル パラメータに深刻な影響を与え、全体的なパフォーマンスが低下します。外れ値を処理するには、まず外れ値を特定する必要があります。特定の機能の外れ値を検出するには、絶対値が平均値プラス 3 標準偏差より大きいか、最も近いウィスカー値 (最も近い四分位値プラス四分位範囲値の 1.5 倍) の外にあるなどの一定の経験則を適用します。特定の機能の外れ値を特定したら、以下の手法を使用して外れ値を処理できます。
多変量外れ値 (複数の特徴に関する外れ値) である観測値を検出する手法はありますが、それらはより複雑であり、一般的に機械学習モデルのトレーニングという点ではそれほど価値を追加しません。また、サポート ベクター マシンなどのほとんどの非パラメトリック機械学習モデルや、決定木、ランダム フォレスト、XGBoost などのツリーベースのアルゴリズムを使用する場合、外れ値は問題にならないことにも注意してください。
実世界のデータセットでは、欠損データは非常に一般的です。XGBoost などの一部のアルゴリズムを除き、従来の機械学習アルゴリズムのほとんどは、トレーニング データセットで欠損値を許可しません。したがって、欠損値の修正は、機械学習モデリングにおける日常的なタスクの 1 つです。欠損値を処理する手法はいくつかありますが、どの手法を実装する前にも、欠損データの原因を理解すること、または少なくともデータがランダムに欠損しているかどうかを知ることが重要です。データがランダムに欠損していない場合、つまり特定のサブグループに欠損データがある可能性が高い場合、特に利用可能なデータがほとんどまたはまったくない場合は、それらの値を補完することが困難になる可能性があります。データがランダムに欠損している場合は、以下で説明する一般的な処理手法のいくつかを使用できます。これらにはすべて長所と短所があり、どの方法がユースケースに最適であるかを決定するのは私たち次第です。
多くの場合、機械学習モデルで使用する特徴にはさまざまな範囲があります。スケーリングせずにそれらを使用すると、絶対値の大きい特徴が予測結果を支配します。代わりに、各特徴が予測結果に貢献する公平な機会を与えるには、すべての特徴を同じスケールにする必要があります。最も一般的な 2 つのスケーリング手法は次のとおりです。
決定木、ランダム フォレスト、XGBoost などのツリーベースのアルゴリズムは、スケーリングされていないデータで動作し、これらのアルゴリズムを使用するときにスケーリングする必要がないことに注意してください。
現在、膨大なデータがあり、モデルをトレーニングするための膨大な機能のコレクションを構築できます。ほとんどのアルゴリズムでは、機能が多いほどモデルのパフォーマンスを向上させるオプションが増えるため、良いことです。ただし、これはすべてのアルゴリズムに当てはまるわけではありません。距離メトリックに基づくアルゴリズムは次元の呪いに悩まされています。つまり、機能の数が大幅に増加すると、2 つの観測値間の距離値が無意味になります。したがって、距離メトリックに依存するアルゴリズムを使用するには、多数の機能を使用していないことを確認する必要があります。データセットに多数の機能があり、どの機能を保持してどの機能を破棄するかわからない場合は、主成分分析 (PCA) などの手法を使用できます。PCA は、古い機能のセットを新しい機能のセットに変換します。最も高い固有値を持つ機能が古い機能からほとんどの情報を取得するように、新しい機能を作成します。次に、上位の数個の新しい機能のみを保持し、残りを破棄できます。
相関分析や特徴選択アルゴリズムなどの他の統計手法は、教師あり学習の問題で特徴の数を減らすために使用できます。ただし、通常、同じ数の特徴で PCA が取得するのと同じレベルの情報は取得できません。
このステップは例外です。ターゲットにのみ適用され、特徴には適用されないためです。また、ほとんどの機械学習アルゴリズムでは、ターゲットの分布に制限はありませんが、線形回帰などの特定のアルゴリズムでは、ターゲットが正規分布している必要があります。線形回帰では、エラー値が対称で、すべてのデータ ポイントでゼロの周囲に集中していると想定されます (正規分布の形状と同様)。また、ターゲット変数が正規分布している場合は、この想定が満たされます。ヒストグラムをプロットすることで、ターゲットの分布を把握できます。シャピロ ウィルク テストなどの統計テストでは、この仮説をテストすることで正規性について知ることができます。ターゲットが正規分布していない場合は、対数変換、平方変換、平方根変換などのさまざまな変換を試して、どの変換でターゲット分布が正規になるかを確認できます。複数のパラメーター値を試す Box-Cox 変換もあり、ターゲットの分布を正規分布に最もよく変換するものを選択できます。
注: 特徴処理手順は任意の順序で実装できますが、適用順序を十分に考慮する必要があります。たとえば、値平均置換を使用した欠損値処理は、外れ値検出の前または後に実装できます。ただし、欠損値を外れ値処理の前または後のどちらで処理するかによって、置換に使用される平均値が異なる場合があります。この記事で概説した特徴処理の順序では、後続の処理手順に影響を及ぼす可能性のある順序で問題を処理します。したがって、この順序に従うと、ほとんどの問題に対処するのに一般的に効果的です。
はじめに述べたように、特徴エンジニアリングは機械学習の一側面であり、モデルのパフォーマンスを非常に高いレベルで制御できます。特徴エンジニアリングの可能性を最大限に引き出すために、この記事では、新しい特徴を作成し、それを機械学習モデルで最適に機能するように処理するさまざまな手法を学びました。この記事のどの特徴エンジニアリングの原則と手法を使用するかに関係なく、ここで重要なメッセージは、機械学習とはアルゴリズムにパターンを見つけ出すように求めることだけではないことを理解することです。必要な種類のデータを提供することで、アルゴリズムが効果的に仕事を行えるようにすることが機械学習です。