欠損データの処理

PySparkで学ぶ特徴量エンジニアリング

John Hogue

Lead Data Scientist, General Mills

デジタル時代におけるデータ欠損の原因

データ収集

  • センサーの故障

データ保存ルール

  • 2017-01-01 vs January 1st, 2017

異種データの結合

  • 月次から週次へ

意図的な欠損

  • プライバシーの懸念

欠損

PySparkで学ぶ特徴量エンジニアリング

欠損の種類

完全ランダム欠損

  • 欠損データが完全にランダムなサブセット

ランダム欠損

  • 他の観測値に基づき条件付きでランダムに欠損

非ランダム欠損

  • データの収集方法に起因する欠損
PySparkで学ぶ特徴量エンジニアリング

欠損値の評価

欠損データのある行を削除するタイミング

  • 欠損値が少ない場合
  • 完全ランダム欠損の場合

isNull()

  • 現在の式がnullであればTrueを返す。
df.where(df['ROOF'].isNull()).count()
765
PySparkで学ぶ特徴量エンジニアリング

欠損値の可視化

# Import library
import seaborn as sns

# subset the dataframe sub_df = df.select(['ROOMAREA1'])
# sample the dataframe sample_df = sub_df.sample(False, .5, 4)
# Convert to Pandas DataFrame pandas_df = sample_df.toPandas()
# Plot it sns.heatmap(data=pandas_df.isnull())
PySparkで学ぶ特徴量エンジニアリング

欠損値のヒートマップ

欠損データのヒートマップ

PySparkで学ぶ特徴量エンジニアリング

欠損値の補完

欠損値を置換するプロセス

ルールベース

  • ビジネスロジックに基づく値

統計ベース

  • 平均・中央値などを使用

モデルベース

  • モデルで値を予測
PySparkで学ぶ特徴量エンジニアリング

欠損値の補完

** fillna(value, subset=None)

  • value 欠損値に代入する値
  • subset 対象とする列名のリスト
# Replacing missing values with zero
df.fillna(0, subset=['DAYSONMARKET'])
# Replacing with the mean value for that column
col_mean = df.agg({'DAYSONMARKET': 'mean'}).collect()[0][0]
df.fillna(col_mean, subset=['DAYSONMARKET'])
PySparkで学ぶ特徴量エンジニアリング

では、練習しましょう!

PySparkで学ぶ特徴量エンジニアリング

Preparing Video For Download...