機械学習のためのデータ前処理: オプションと推奨事項
特徴量の抽出ステップ
(Raw data)。未加工のデータ
prepared data。集約されたデータ学習用列、予測用列が存在する
engineered features。学習、予測時にモデルに入力するX。スケーリングやone hot encodingされた値を含むもの
https://gyazo.com/e2707bab866dcb87c393b4ec66f2c90a
前処理の変換の粒度
train predict時のinstance levelの変換
学習と予測で同じ処理方法を適用する
train時には全走査して変換。predict時にはinstace levelの変換
学習の状態を保持しておく(ステートフル)。事前に学習データから平均や最大値などの計算をする(予測データを使用するとリークにつながるため学習データのみ用いる)。それらを利用して予測時のデータ変換を行う。予測時には学習データの平均といった定数を用いるのでinstance levelの操作となる。tfidfの計算もこれに含まれる
train predict時にwindow aggreagaion
3, 5分以内の温度、などある間隔で処理される特徴量。リアルタイムで計算する必要がある
GCPにおける機械学習pipeline
bigqueryで前処理
フィルタリング(必要なデータを抽出する)
bigqueryでやるとよい。データソースを取得する処理
学習、評価、テスト用データセットをそれとわかる形で作成、保存
これらの作成に必要な各種変換をSQLで書くのは良くない
オンライン学習の時はシステムからの学習データと、APIがデプロイされているデータポイント(予測時)でSQLの処理を重複して保持して置かなければならない(API側がjavaなどで実装されている場合はjavaで書かなければならない)。変更時に2箇所修正するというオーバヘッドが起きる
バッチ予測のときはどちらもテーブルに格納できるので、処理の記法SQLで共通化できる
dataflow(apache beam)
window処理機能などをもつ、全走査変換なども実行できる。dataflowを中心として前処理や予測値の格納を行うシステムを作ることができる
https://gyazo.com/6cb978b445803a4e008571d67c0b4080
tensorflow
全走査変換ができない。xxx_input_fnの形でinstance levelの変換を共通にできる
tf.Transformを使うと、予測時に新しいデータポイントに変換を適用することができる
全走査処理を行う分析フェーズ
未加工のデータに処理を適用する変換フェーズtransform_fn。学習と予測時に行われる
https://gyazo.com/d4764b38978960f42360d8ba7547f189
前処理の課題
training service skew
学習時と、予測サービス上で結果に乖離が生じること
データハンドリングの方法が学習と、予測サービスで異なっている
データの傾向が学習時と予測サービスで変わった
feedback loopがモデルとアルゴリズムの間で生じている
学習の効率を高める
モデルの一部に入力するデータの前処理を入れると、生の学習データを加工する処理がepochごとに行われる。
用語
instance level transformation(インスタンスレベル変換)
変換にインスタンス(データポイント)の値が必要になるような処理。閾値で変換する。2つの特徴量の掛け合わせなど
full-pass transformation(全走査変換)
データ全体の統計量を用いた計算(正規化など)を行う処理。学習データ全体に渡る平均などを計算するための処理のこと
参考