1 前処理の目的と位置づけ
前処理は、機械学習(統計的学習を含む)でモデルに学習・推論させる前に、入力データを整え、モデルが扱いやすい形式へ変換する一連の作業を指す。対象が数値、カテゴリ、時系列、画像、文章など多様であるため、前処理は「データの品質を上げる技術」でもあり、「表現形式を揃える技術」でもある。
目的は大きく、(1)欠損や不整合、(2)外れやノイズ、(3)スケールや分布の不揃い、(4)表現の不統一を是正することにある。これにより損失関数の最適化が進みやすくなり、再現性や解釈可能性も改善しうる。
前処理の設計は、データの性質、利用するモデル(線形モデル、木系モデル、深層学習など)、評価設計(交差検証や時系列分割など)に密接に結び付く。特に、誤ったタイミングで全データの情報を使うと、実運用で得られない知識が混入し、見かけ上の精度だけが上がる結果になる。
1.1 学習前に整えるべき課題
学習を始める前に、データが抱える構造的な問題を把握し、適切な対処方針を決めることが重要である。典型的には、欠損、不整合、外れ値、ノイズ、スケールの不一致、分布の偏り、表現の不統一が問題になる。
1.1.1 欠損値と不整合
欠損値は、観測されなかった項目や取得失敗により生じる。欠損の発生メカニズム(偶然、条件付き、系統的)を見極めずに単純に穴埋めすると、バイアスが混ざる可能性がある。
不整合は、同じ意味のはずの値が形式や単位、カテゴリ体系の違いによって矛盾して記録される状態を含む。例として、同一指標の単位が混在する、日付の書式が統一されていない、カテゴリの表記が揺れている等が挙げられる。前処理では、欠損と不整合を分けて扱い、どちらも学習に悪影響が出ない形へ整える。
1.1.2 外れ値とノイズ
外れ値は、データ生成過程から見て極端に異なる値である。ノイズは測定誤差や転記ミスなどに起因し、本来は説明変数・目的変数の関係に直接寄与しない。これらはモデルによって影響度が異なる。たとえば二乗誤差に敏感な学習では、少数の極端値が損失を支配し、学習が不安定になることがある。
外れ値の扱いは一律ではない。外れでも意味がある場合は保持すべきであり、逆に誤記の可能性が高い場合は修正や除去の検討が必要となる。前処理では、統計量と業務知識を併用し、判断の根拠を作ることが求められる。
1.1.3 スケール・分布の偏り
説明変数のスケールが揃っていないと、勾配ベースの最適化で更新の影響が偏り、学習が遅くなったり、数値計算が不安定になったりすることがある。分布の偏りも同様で、特定の値域に極端な集中があると、損失関数の形が学習に適さなくなる場合がある。
また、訓練データと実運用データで分布が変化すると、前処理で作った変換が前提を外れる。よって、スケーリングや正規化は、統計量をどの範囲で推定したか(訓練のみか、全体か)を厳密に設計する必要がある。
1.2 前処理が与える影響
前処理は単なる準備作業ではなく、モデルの挙動に直接影響する。適切な設計は精度と安定性を高め、誤った設計は性能低下や誤解を招く。ここでは主に、性能、収束、解釈性の観点を扱う。
1.2.1 モデル性能への寄与
前処理は情報の保持と最適化しやすさの両立を目指す。たとえば分布が強く偏っている場合、適切な変換により目的変数との関連が学習しやすい形になり、一般化性能が向上することがある。
一方で、不要な圧縮や過度なクリッピングは、手掛かりとなる差異を失わせる。さらに、カテゴリの扱いや文字列正規化の失敗は、同一概念の分裂を生み、学習データの有効性を下げる。性能は前処理の選択とパラメータに依存するため、検証を通じて確認する必要がある。
1.2.2 学習の安定性と収束
数値データではスケールの調整が、勾配の大きさを均す役割を果たす。これにより学習率に対する感度が下がり、収束の速度や再現性が改善されることがある。
欠損処理や外れ値対策も同様に、損失の形をなだらかにし、学習が破綻するリスクを減らす。特に複数特徴量が混在する場合、ある特徴だけが極端な値域を持つと、最適化が局所的に歪むことがある。
1.2.3 解釈性への影響
前処理は特徴量の意味を変えることがある。たとえば標準化や対数変換は、元の単位系や距離の解釈を難しくする。モデルを説明する際には、前処理後の特徴量がどのような変形を受けたかを明示する必要がある。
ただし、前処理が整理されていれば、逆変換や係数解釈の枠組みを作りやすくなる。解釈性を重視する場合は、変換の種類を選ぶだけでなく、説明可能性に耐えるドキュメントも整備する。
1.3 前処理設計の基本原則
前処理の品質は、手順の正しさだけでなく、実験と本番の整合性、再現性、情報漏えいの防止といった設計原則に支えられる。以下では運用上の要点を整理する。
1.3.1 再現性
再現性とは、同じ入力・同じ設計の下で同様の結果が得られる性質である。前処理では、欠損処理の統計量、スケーリングに用いる平均や分散、カテゴリの語彙リストなどの「学習に相当する情報」を、訓練データから算出し固定する必要がある。
実装では、乱数の種や学習タイミング、バージョン管理を含めて記録し、後から同じ変換を再現できる状態にすることが望ましい。これにより実験比較の信頼性が高まる。
1.3.2 データリークの回避
データリークは、モデルが本来利用できない情報が学習段階に入り込む現象である。前処理で全データの統計量を使う、訓練・検証・テストの境界を無視してカテゴリ辞書を作る、未来時点の情報を特徴量に取り込むといったケースが典型である。
回避には、分割(分割単位や時系列の順序)を尊重し、変換に必要な統計量は訓練側のみで推定する設計が基本となる。さらに、評価時には同一変換を適用することで一貫性を担保する。
1.3.3 学習データに基づく変換
変換器(スケーラ、エンコーダ、語彙構築など)は、訓練データからパラメータを学び、その後は固定して推論に適用する。推論時に新しいデータが来ても、訓練時に定義された枠組みの範囲で処理するのが原則である。
この方針は、入力分布の変化に対する頑健性の議論とも関係する。新規カテゴリが増える可能性があるなら、未知カテゴリの扱い方をあらかじめ定義し、モデルが破綻しないようにする。
2 データの取得・整形(基礎工程)
基礎工程は、取得した生データを「モデル入力に近い形」へ寄せる段階である。最初に型と整合性を確認し、その後に欠損、重複、表記ゆれを順序立てて解く。ここでの設計は、後段の特徴量変換の前提を決める。
2.1 データ型の確認と標準化
データ型の確認は、数値・カテゴリ・日時・テキストなどの扱いを誤らないための出発点である。たとえば数値が文字列として読み込まれていると、スケーリングや統計計算が意図した通りに行われない。日時が文字列のままだと、時差や順序関係の処理が難しくなる。
標準化では、単位系、桁、丸め、タイムゾーン、欠損表現(空文字、NULL、特定の符号)を統一する。これにより後工程での変換が安定し、同種の入力に対して同種の結果が得られる。
2.2 欠損処理
欠損処理は最も影響が大きい工程の一つである。まず欠損の位置と性質を把握し、次に代入方法、さらに「欠損自体を情報として扱うか」を決める。
2.2.1 欠損の検出と分類
検出では欠損がどこに、どの程度存在するかを確認する。分類では、欠損がランダムに近いのか、特定の条件と結び付くのかを推定する。たとえば欠測が特定の値域に集中している場合、単なる欠損ではなく収集過程の都合が反映されている可能性がある。
また、欠損が行全体に及ぶのか、列単位か、時点単位かといった粒度の違いも整理する。粒度が異なると、欠損の扱い方や欠損を補う際の妥当性が変わる。
2.2.2 代表値・回帰・補間による代入
代表値による代入は、平均や中央値、最頻値などを穴埋めする方法である。単純で実装が容易だが、分散を過小評価しやすい。
回帰による代入は、他の特徴量を用いて欠損箇所を予測するアプローチである。単純な平均よりも保持できる関係が多い一方、誤差が伝播しやすく、モデル選択や過学習の配慮が必要になる。
補間は時系列や連続的な領域で特に使われる。前後の観測を使って連続性を仮定するが、急変が起きる現象には不適切になり得る。よって、補間の前提と妥当性を検討して適用する。
2.2.3 欠損を特徴量として扱う方法
欠損フラグ(欠損かどうか)を追加して、欠損そのものを学習に反映する方法がある。欠測が意味を持つ場合、単なる補完よりも有効になることがある。
さらに高度な手法として、複数の欠損パターンを整理し、欠損の頻度や連続長といった指標を特徴化する。これらはデータ収集プロセスの影響をモデルに伝える役割を果たし得る。
2.3 重複・矛盾の整理
重複は、同一観測が複数行に存在する、あるいは結合時に同一キーが増殖することで生じる。重複を放置すると、特定のパターンが過剰に重み付けされる。
矛盾は、同じ対象(同一IDや同一時点)に対して異なる値が入っている状態である。どの値を採用するかはルール化が必要で、優先度(最新、信頼度、計測回数、ソースの階層)を決める。矛盾の解消は前処理の中でも監査の対象になりやすい。
2.4 文字列・カテゴリの整形
文字列やカテゴリは、表記揺れ、前後空白、大小文字の違い、略記、記号混在などにより、同一概念が分割されやすい。整形はモデルの学習効率と解釈に直結する。
2.4.1 正規化と表記ゆれ対策
正規化では、全角半角、大小文字、空白、記号の扱いを揃える。さらに、表記ゆれ辞書や正規表現により、よくあるパターン(例:略称の統一)を統一する。
ただし過剰な正規化は、区別すべき意味まで同一化してしまう。語の意味が近い別概念を誤って統合しないよう、変換規則は検証を通じて調整する。
2.4.2 低頻度カテゴリの扱い
低頻度カテゴリは、学習が不安定になる要因になり得る。カテゴリごとの統計が十分に学べず、推論時に未知扱いとなる可能性も高まる。
対策として、頻度が閾値以下のカテゴリを「その他」へ集約する方法がある。集約は情報損失でもあるため、頻度閾値や集約の単位をチューニングすることが望ましい。
2.4.3 エンコーディング戦略
エンコーディングはカテゴリを数値表現へ変換する工程である。代表的にはワンホット、順序情報を仮定した数値化(ターゲットではなく順序がある場合に限る)、頻度に基づく表現、統計量を用いた目的変数に近い情報を使う符号化(ただしリーク注意)などがある。
どの方式を選ぶかは、モデルの種類とカテゴリ数に依存する。カテゴリ数が多い場合は次元が爆発しやすく、疎行列や埋め込みのような工夫が求められる。
3 特徴量の変換とスケーリング
前処理の中核の一つとして、数値特徴量の変換がある。スケーリングは最適化の効率化に、外れ値処理は頑健性に、分布変換は損失地形の適合に寄与する。
3.1 スケーリング(正規化・標準化)
スケーリングは、特徴量の値域や分散を整え、特徴間の相対的な影響を均す目的で行う。手法によって仮定する統計の性質が異なるため、外れ値の有無や分布形状を考慮する。
3.1.1 最小最大スケーリング
最小最大スケーリングは、各特徴量を所定の範囲に線形変換する手法である。代表的には0〜1への写像がある。
外れ値が大きいと、最小や最大が引っ張られ、ほとんどのデータが狭い領域に押し込められることがある。そのため頑健性の観点では限界があり、データの特徴に応じた選択が必要になる。
3.1.2 平均・分散による標準化
平均・分散による標準化は、平均との差を標準偏差で割り、分布を相対的に揃える。正規化の目的が「中心とスケールの調整」である場合に適する。
標準化は分布が大きく歪んでいたり外れ値が多いと、統計量が影響されやすい。外れが疑われる場合にはロバスト手法の検討が有効となる。
3.1.3 ロバストなスケーリング
ロバストなスケーリングは、外れ値の影響を受けにくい統計量(中央値や四分位範囲など)を用いてスケールを決める考え方である。極端値による位置・散らばりの歪みを抑えられるため、実データの汚れを想定する場面で有利になることがある。
手法選択にあたり、ロバスト統計が計算可能な条件(サンプル数、欠損や重複の扱い)を確認する必要がある。
3.2 外れ値に対する変換
外れ値対策は、除去か、変形か、学習側での頑健性に任せるかに分かれる。前処理では変換によって極端な影響を抑える戦略がよく用いられる。
3.2.1 頑健統計にもとづく処理
頑健統計にもとづく処理では、中心位置や分散の見積りを外れに強い指標で行い、変換の基準を安定させる。これにより、極端値が計算を歪めるリスクを下げる。
ただし、外れ値が本当に意味を持つ場合には、変換が情報を潰す可能性がある。外れの発生メカニズムを理解した上で適用することが望ましい。
3.2.2 切り詰め(クリッピング)
クリッピングは、値を上限・下限で切り詰める方法である。上位・下位の極端値が損失を支配するのを防ぐ狙いがある。
一方で、境界を超えた差異がすべて同じ値に潰れるため、微妙なランクや強度の情報は失われる。閾値は分位点などに基づき、性能検証を通じて定める。
3.2.3 変換による分布の安定化
分布が重く裾を引く場合、平方根や対数などの単調変換で外れの影響を圧縮し、学習を安定させることがある。単調変換は順序関係を保ちやすく、解釈の枠組みにも比較的しやすい。
ただしゼロや負の値への対応、変換後のスケールの扱い、数値誤差の影響など実装上の注意が必要になる。
3.3 分布変換と正規化
分布変換は、データの形状を損失関数が学習しやすい方向へ寄せる試みである。単にスケールを揃えるだけでなく、歪みや裾の重さを調整する狙いが含まれる。
3.3.1 対数・平方根などの変換
対数変換や平方根変換は、正の値に対して非線形に縮めることで、分散の大きい特徴量を扱いやすくする。特に右に長い分布で有効な場合がある。
ゼロが含まれるときは加算定数を用いるなど工夫が必要で、どの定数を選ぶかはデータの性質と解釈の要件に依存する。変換は単調であることが多く、順位情報を維持するメリットがある。
3.3.2 一様化やランク変換の考え方
一様化やランク変換は、経験分布にもとづいて値を再配置し、分布の形状をならす発想である。ランクに基づく変換は外れや極端な値の影響を弱めやすい。
ただし単調性の範囲や、離散値の扱い(同順位の束ね方)によって挙動が変わる。学習目的に対して十分な情報が残るかを評価で確認する必要がある。
3.4 特徴量エンジニアリング
特徴量エンジニアリングは、既存データから新しい特徴量を作り、モデルが捉えやすい形に情報を再表現する作業である。目的変数との関係を直接構築するのではなく、表現の工夫として扱うのが基本となる。
3.4.1 比率・差分・派生特徴
比率や差分、合成指標などの派生特徴は、スケール差や個体差を補正するのに役立つ。たとえば2つの測定値の差を取ることで変動成分を強調できる場合がある。
派生特徴を増やし過ぎると次元が増え、過学習のリスクも高まる。作成する指標は妥当性(物理的・統計的な意味)と検証結果に基づいて絞り込む。
3.4.2 集計(集約)特徴量
集計特徴量は、グループ単位で統計量を計算する方法である。顧客単位、店舗単位、ユーザ単位などで平均や合計、カウント、最大値などを作り、個体の履歴を要約する。
集計では、集計窓の取り方や時点の切り方が重要になる。過去以外の情報が混ざるとリークになり得るため、時間に沿った設計が必要である。
3.4.3 特徴量の離散化(ビニング)
ビニングは連続値を区間に分けてカテゴリ化する手法である。非線形関係を段階的に近似しやすく、外れの影響も抑えられる場合がある。
一方で区間の境界で情報が不連続になり、閾値近傍での安定性が損なわれることがある。ビン数や境界の選び方は、データ量とモデルとの相性で調整する。
4 時系列・画像など領域別の前処理
データの種類によって前提や適用すべき処理が変わる。時系列では時点順序が、画像では空間構造が、テキストでは語彙と文脈が鍵になる。共通点として、変換のタイミングとリーク回避は常に意識する必要がある。
4.1 時系列データ
時系列の前処理では、欠損やリサンプリングだけでなく、窓の設計や予測対象に合わせた特徴量構成が中心になる。
4.1.1 欠損と間引きの扱い
欠損は単純補間だけでなく、欠損が起きた時間帯の意味をどう扱うかが重要である。欠損が測定停止を示すなら、補間よりも欠損フラグや別特徴量の追加が適する場合がある。
間引きは頻度を下げる操作で、長期トレンドの把握には有効だが、急変の情報が失われる。目的と解像度のバランスを検討する。
4.1.2 期間切り出しと窓(スライディング窓)
スライディング窓は、連続する期間を切り出して入力系列として扱う方法である。窓幅と移動幅の選択は、予測性能だけでなく計算量にも影響する。
期間切り出しでは、訓練と評価の境界を時系列順序で分離し、未来情報が過去特徴に混入しないようにする必要がある。これにより評価の妥当性が保たれる。
4.1.3 予測目標に応じた特徴量設計
予測が次時点なのか、複数ステップ先なのか、あるいは系列の分類なのかで特徴量設計は変わる。短期予測では局所変動に関する指標が重要になりやすい。
また、季節性や曜日効果など周期性をどう表現するかも検討点である。時刻由来の特徴を追加する場合、時系列の分割と矛盾しないよう設計する。
4.2 画像データ
画像の前処理では、画素の統計量を揃え、入力サイズと色空間を整え、学習に適した形へ変換する。注意点として、データ拡張は前処理とは目的が異なるため区別して扱う。
4.2.1 サイズ調整とリサイズ
リサイズは入力解像度を揃えるために行う。アスペクト比保持の有無で形状が歪むため、手法を選ぶ必要がある。
同時に、座標系を伴うタスク(検出やセグメンテーション)では、リサイズがラベルの整合性に影響する。前処理で幾何変換を行うなら、対応するラベルも同じ変換で更新する。
4.2.2 輝度・コントラストの正規化
輝度やコントラストの正規化は、照明条件のばらつきを減らして学習を安定させる。代表的にはチャンネルごとの平均・分散による標準化や、範囲の正規化がある。
画像の色情報は色空間の選択にも依存する。RGBのまま扱うのか、別の色空間へ変換するのかはデータとモデル設計に依存し、変換の一貫性が重要になる。
4.2.3 データ拡張との区別
データ拡張は、学習時に入力のバリエーションを増やす目的で行う。これは前処理(推論時も必要な正規化やリサイズ)と混同されやすいが、役割が異なる。
拡張は学習のみで適用し、評価・推論では固定した変換を用いるのが一般的である。そうしないと評価が不公平になり、性能指標が解釈しにくくなる。
4.3 テキストデータ
テキストの前処理は、文字列をモデルが扱える数値へ変換する工程である。語彙と文脈をどう表現するかが中心になる。
4.3.1 トークン化と前処理
トークン化は文を単位(単語、サブワード、文字など)に分ける作業である。分割粒度は語彙サイズと表現力のトレードオフに直結する。
前処理として、正規化(全角半角、大小、記号処理)や不要語の扱いなどを行うことがある。ただし削除を強く行い過ぎると意味が欠落するため、タスクに応じた設計が必要である。
4.3.2 ステミング・レンマ化
ステミングやレンマ化は語の形態を正規形へ寄せる考え方である。語彙を減らし、同根語を統合しやすくする狙いがある。
ただし英語や日本語など言語特性により効果が異なる。誤った変換による意味の歪みが生じると、学習に悪影響が出るため、ルールの妥当性と評価が重要になる。
4.3.3 ベクトル化と語彙の構築
ベクトル化は、トークン列を数値表現へ変換する工程である。単語頻度にもとづく表現、埋め込みによる表現、文全体の埋め込みなど方式は多様である。
語彙の構築では、訓練データから語彙を定義し、未知トークンの扱いを決める。さらに、固定長へ整形するためのパディングやマスクも前処理に含められることがある。ここでも分割とリーク回避が重要になる。
5 前処理の評価・運用
前処理は一度作って終わりではなく、評価と運用の中で改善される。検証設計への組込み、ハイパーパラメータの調整、リーク監査、本番での整合性確認が鍵になる。
5.1 前処理を評価に組み込む方法
評価では、学習と同様の前処理手順を評価データに適用する必要がある。分割の取り方とパイプライン設計が結果の信頼性を決める。
5.1.1 学習・検証・テスト分割
分割はデータの時系列性や依存関係を考慮して設計する。ランダム分割が不適切な場合、順序を保った分割やグループ単位の分離が必要となる。
前処理における統計推定は、訓練分割のみで行い、検証・テストへは学習済み変換を適用する。この一貫性により、過大評価のリスクを下げられる。
5.1.2 パイプライン化による一貫性
パイプライン化とは、前処理から特徴量生成、モデル推論までを統一された手順として実行可能にする設計である。これにより、推論時の入力処理漏れや実装差異を防ぎやすくなる。
また、再現性の面でも利点がある。変換器のバージョンと設定が固定され、実験比較が追跡しやすくなるためである。
5.2 ハイパーパラメータの調整
前処理には閾値や方式の選択など、学習とは別の調整項目が含まれる。適切な探索により、前処理が性能へ与える寄与を適切に引き出す。
5.2.1 スケーリング方式の選択
スケーリング方式はデータ分布とモデルの性質に依存する。極端値が多いならロバスト寄りが有利になりやすい一方、外れが少ないなら標準化が扱いやすい場合がある。
探索では、方式の切替とともに、統計量の推定方法や欠損含有時の扱いも含めて比較するのが望ましい。
5.2.2 欠損処理の戦略比較
欠損の代入方法は性能に直結する。平均・中央値、回帰、補間、欠損フラグ併用など複数案を比較し、検証指標で判断する。
欠損率が高い場合は特に、どの方法でも性能が頭打ちになる可能性がある。その場合は追加データ取得や欠損メカニズムの見直しも検討対象になる。
5.2.3 特徴量変換の効果検証
特徴量の変換や派生特徴の追加は、改善する場合と悪化する場合がある。単純な追加は次元増による過学習を招くことがあるため、正則化やモデル選択と合わせて検証するのが合理的である。
評価では、前処理のみの変更による差分を観測し、モデル側の変化と混同しないよう注意する。
5.3 データリークと監査
前処理の設計で最も重大なリスクの一つが情報漏えいである。監査では変換器の学習タイミングや実装の境界を中心に確認する。
5.3.1 変換統計の学習タイミング
スケーリングや正規化で必要な統計量は、訓練分割から学習し固定すべきである。実装上、全体で統計量を計算してから分割するような流れになっていないかを確認する。
また、集計特徴量では、過去だけを集めた形になっているか、窓の境界が適切かを点検する必要がある。
5.3.2 事前計算の安全性チェック
前計算には、計算を高速化する利点がある一方で、リークの温床にもなる。例えば、全データのカテゴリ頻度や頻度ベース指標を作ってから分割すると、検証やテスト側の情報が混入する。
安全性チェックでは、前計算の入力範囲を特定し、訓練以外の情報に依存しないかを確認する。可能なら、分割単位で同じ変換が再計算される仕組みへ置き換える。
5.4 本番運用における注意
本番運用では、学習時と推論時の整合性、入力分布の変化への対応、ロギングが重要になる。前処理の失敗は性能だけでなく保守性にも影響する。
5.4.1 学習時と推論時の整合
学習時に適用した変換と、推論時の変換は同一であるべきである。特に、カテゴリの未知処理、欠損の表現、スケーリングの統計量(訓練由来の固定値)を統一する。
整合が崩れると、同じ実世界の入力でもモデルの出力が再現できなくなる。これを防ぐために、前処理器の設定をモデルと一体で管理する。
5.4.2 入力データ分布の変化への対応
入力分布が変わると、前処理での仮定(例えば分布の形状、値域)が崩れ、精度が低下することがある。対策として、分布のモニタリングを行い、変換器の妥当性を定期評価する。
再学習や変換更新を行う場合は、運用上の段階的切替、A/B検証、ロールバック手順も含めて設計する必要がある。
5.4.3 ロギングと再現手順
ロギングでは、入力の前処理後特徴量、変換器のバージョン、欠損や未知カテゴリの発生状況などを記録する。これにより、不具合の原因を追跡しやすくなる。
再現手順は、同じモデル・同じ前処理設定・同じ入力サンプルに基づいて結果を再計算できる状態を目指す。ログの設計はコストと秘匿性のバランスも考慮し、必要な粒度で運用することが望ましい。