データ分析の「前処理」とは何か?実際の前処理の例を含めて解説

2023年7月19日

データ分析の「前処理」とは?

データ分析、機械学習分野における「前処理」とは、実際に分析を行う前にデータを加工する工程を指します。
データとは、システムのログ出力や人間が手打ちで記録したもの、センサーなどから時系列で収集されてくるものなど、さまざまな背景で収集・蓄積されています。
このデータを前処理をかけることなくデータ分析、機械学習を行うと、ロジックが正常に機能せず誤った結果を導き出すことにも繋がります。

前処理は、データ分析、機械学習の全体の工程の8割程度の時間がかかると言われているほど重要度の高い工程です。

実際の前処理の例

データといっても画像データや音声データ、数値データなどさまざまなものがあります。
ここでは、最も身近な数値データに対する前処理を解説します。

数値型への変換

人間が作成したデータでは、本来数値型が入力されるべき場所に文字列や記号が入力されてしまっているケースがあります。
例えばエクセルデータなどで、他の欄には数値データが入っているにもかかわらず一箇所「〇〇のため測定不可」のようなメモが残されている場合です。

このような場合には文字列データを除去し、全てのデータを数値型に置き換える必要があります。

外れ値の除去

外れ値とは、取得したデータの中で他の値よりも明らかに大きい値や小さい値が観測されていることを指します。
例えば通常10±5くらいの幅で観測されている値の中で、1つだけ500という値があった場合は、その値を外れ値と呼びます。

外れ値は、重要な示唆がある可能性がある場合を除いて、分析のノイズになってしまうため除去します。
外れ値の中でも測定ミスや記録ミスであることが明らかなものを異常値といいます。

欠損値への対処

データが記録できていない状態を「欠損」といいます。
欠損値にはいくつかの対処法があります。

レコードの削除

データの欠損値があった場合、最も低コストで対処したい場合には欠損値が含まれるレコードを削除します。

データ項目が一つでも欠損していた場合にレコードごと削除する方法を「リストワイズ法」といいます。
リストワイズ法はシンプルな手法ではありますが、分析に利用できるデータの件数が大きく減ってしまうというデメリットがあります。

一方で、分析に使用するデータが欠損していなければ、同レコードに欠損があっても良いとする考え方を「ペアワイズ法」といいます。
リストワイズ法よりも分析に使用するデータを確保することができるというメリットがあります。

欠損値に値を代入

リストワイズ法は欠損が含まれている場合に削除するという手法です。
データ量が膨大にある場合にはデータを削除しても大きな影響はありませんが、データ件数が限られている場合はできるだけあるデータを活用する手法を選びます。

それが代入法です。代入法には「単一代入法」と「回帰代入法」などの種類があります。
単一代入法は、例えば「年齢」のデータ項目にいくつか欠損がある場合、欠損は全て「20歳」ということにして欠損値を埋めてしまう手法です。
この時に代入する値は平均値や最頻値を用いることが一般的です。

回帰代入法は、前処理に機械学習を利用して、空欄に入るもっともらしい値を回帰で予測するという考え方です。
手間はかかるものの、単一代入法よりも妥当な値で補完することができます。

正規化

正規化とは、数値が取りうる範囲を揃える処理です。
データ項目によってデータの範囲が大きく異なっている場合にそのまま分析をかけようとすると、正しい結果を導き出すことができません。

例えば、真夏の室内の温度とCO2の関係を分析することを考えます。

温度は一般的に25~40度程度の間で推移し、CO2は外気であれば400ppm、換気されていない室内では2000ppmを超えることもあります。
仮にこのように取りうる範囲が大きく異なるデータをそのまま分析にかけると、機械学習ロジックの中では数値の大きいCO2を過剰に低く評価するなどの悪影響が起きてしまいます。

そういった影響を回避するため、平均0、分散1に正規化するなどの処理を行い、値のスケールを合わせた上で分析を進める必要があります。

参考

書籍

  • 本橋 智光『前処理大全 データ分析のためのSQL/R/Python実践テクニック』 技術評論者

Webページ

  • https://xtech.nikkei.com/atcl/learning/lecture/19/00110/00001/(2023年7月10日確認)
  • https://cogpsy.educ.kyoto-u.ac.jp/personal/Kusumi/datasem17/takano2.pdf(2023年7月10日確認)