非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python/scikit-learn】データの欠損を補完する

   

scikit-learnでデータの補完(欠損値の処理)は、SimpleImputerを用いて行うのが一般的です。このクラスは、欠損値を平均、中央値、最頻値などで補完する機能を提供します。

データの補完(欠損値の埋め合わせ)を行う目的はデータセットの欠損部分を埋めることでモデルや分析の精度を高め欠損によるバイアスやデータ損失の影響を最小限に抑えることです。欠損値を含むデータをそのまま扱うとモデルの学習に悪影響を与える等の問題を起こすため前処理として欠損値のデータの補完を行います。

補完の種類としては以下の4種類あります。どれを使うかはデータの種類や状況によります。今回は平均値 (strategy=’mean’)を」例に挙げたいと思います。

  • 平均値 (strategy=’mean’)
  • 中央値 (strategy=’median’)
  • 最頻値 (strategy=’most_frequent’)
  • 定数 (strategy=’constant’)

プログラム例と実行例

以下のプログラムは欠損値のあるデータを読み込み、SimpleImputerを使って補完して補完後のデータを確認しています。

import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer

# 欠損値を含むデータセットを作成(NaNが欠損値を表す)
data = np.array([[1, 2, np.nan], [3, np.nan, 6], [np.nan, 5, 9], [7, 8, 9]])
df = pd.DataFrame(data, columns=['A', 'B', 'C'])

print("補完前のデータ:")
print(df)

# 平均値で欠損値を補完
imputer = SimpleImputer(strategy='mean')
imputed_data = imputer.fit_transform(df)

print("\n補完後のデータ:")
print(pd.DataFrame(imputed_data, columns=['A', 'B', 'C']))
 

 

以下が実行例です。縦方向の平均値で保管されていることがわかります。

補完前のデータ:
     A    B    C
0  1.0  2.0  NaN
1  3.0  NaN  6.0
2  NaN  5.0  9.0
3  7.0  8.0  9.0

補完後のデータ:
          A    B    C
0  1.000000  2.0  8.0
1  3.000000  5.0  6.0
2  3.666667  5.0  9.0
3  7.000000  8.0  9.0
 

 

データの補完は欠損値を埋め、データセットを完全なものにするための重要な手法ですが、適切な方法を選ばなかった場合やデータの特性を無視して補完した場合、データの質やモデルの性能に悪影響を与えることがあります。したがって、補完方法を選ぶ際にはデータの特徴を理解し、複数の補完方法を比較しながら慎重に行うことが大切です。

 

スポンサーリンク

 - Python