本番環境 ML システム: データを変換するタイミング

生データは特徴量エンジニアリング(変換)する必要があります。データの変換はいつ行うべきですか?大まかに言えば、特徴量エンジニアリングは次の 2 つの期間のいずれかで行うことができます。

  • モデルのトレーニング
  • モデルのトレーニング中に

トレーニング前にデータを変換する

このアプローチでは、次の 2 つの手順を行います。

  1. コードを記述するか、専用のツールを使用して、元のデータに変換します。
  2. 変換されたデータを、モデルが取り込むことができる場所(ディスクなど)に保存します。

メリット

  • システムは未加工データを 1 回だけ変換します。
  • システムはデータセット全体を分析して、最適な変換戦略を決定できます。

デメリット

トレーニング サービング スキューは、システムが動的(オンライン)推論を実行する場合に危険です。動的推論を使用するシステムでは、通常、未加工データセットを変換するソフトウェアと予測を提供するソフトウェアが異なるため、トレーニング サービング スキューが発生する可能性があります。一方、静的(オフライン)推論を使用するシステムでは、同じソフトウェアを使用できる場合があります。

トレーニング中にデータを変換する

このアプローチでは、変換はモデルコードの一部です。モデルは、元のデータをインポートして変換します。

メリット

  • 変換を変更しても、同じ元データ ファイルを使用できます。
  • トレーニング時と予測時に同じ変換が実行されます。

デメリット

  • 変換が複雑になると、モデルのレイテンシが増加する可能性があります。
  • 変換はバッチごとに行われます。

バッチごとにデータを変換するのは難しい場合があります。たとえば、Z スコア正規化を使用して元の数値データを変換するとします。Z スコア正規化には、特徴量の平均と標準偏差が必要です。ただし、バッチごとの変換では、データセット全体ではなく、1 つのバッチのデータにのみアクセスできます。したがって、バッチのばらつきが大きい場合、あるバッチの Z スコア(-2.5 など)は、別のバッチの -2.5 と同じ意味ではありません。回避策として、データセット全体の平均と標準偏差を事前に計算し、モデルで定数として使用できます。