pandasによる外れ値の可視化と扱い方

元データとスクリプト

GitHub - og3/denkiyohou: 日次の気象情報から電気消費量を予測するモデル
日次の気象情報から電気消費量を予測するモデル. Contribute to og3/denkiyohou development by creating an account on GitHub.

pandasによる外れ値の可視化

import pandas as pd
import matplotlib.pyplot as plt


# CSVファイルの再読み込み
df = pd.read_csv('daily_weather_and_power_consumption.csv')


# 列名の整形
df.columns = [col.strip().replace('\n', '') for col in df.columns]


# "年月日"以外を数値に変換(変換できないものはNaNに)
for col in df.columns:
    if col != "date":
        df[col] = pd.to_numeric(df[col], errors='coerce')


# 数値列の抽出
numeric_cols = df.select_dtypes(include='number').columns


# 箱ひげ図の描画
df[numeric_cols].plot(kind='box', subplots=True, layout=(2, 4), figsize=(14, 6), sharex=False, sharey=False)
plt.tight_layout()
plt.show()

箱ひげ図の構造と外れ値の位置

 箱ひげ図は各変数の分布を視覚化するもので、以下の要素で構成されます。

  • 箱(box)

     → データの中央50%(第1四分位Q1~第3四分位Q3)を示します。

  • 線(中央の横線)

     → 中央値(median)です。

  • ひげ(上下に伸びる線)

     → 通常値の範囲(Q1−1.5×IQR〜Q3+1.5×IQR)を示します。

  • 点(箱の外にある小さな●)

     → 外れ値と見なされるデータです。この点が多いほど、その変数に極端な値が含まれているということです。

「外れ値の削除」は必ずしも正しい処理ではない

Q、可視化してみたが、これらの外れ値って必ず削除する必要があるのか?と思った。データとしてまとまりが感じにくいってだけで、消しちゃうと予測モデルとしては現実とあってないものになりそうな気がしている。

A、「外れ値の削除」は必ずしも正しい処理ではなく、モデルの目的と使い方次第で判断が変わります。

外れ値を削除すべきケース

  • センサー誤作動など明らかに異常なデータが含まれているとき

  • 分布に敏感なモデル(例:線形回帰)を使い、平均的な傾向を重視したいとき

  • モデルの学習が、外れ値の影響で著しく不安定になっているとき

外れ値を残すべきケース(あなたの懸念に近い)

  • 外れ値が実際に起きる現象(真夏の猛暑や停電直後の節電など)であるとき

  • 異常な日こそ予測したい対象(例:需要の急増、異常気象対策)であるとき

  • 小さなデータセットなので、多様性を削ると予測精度が落ちるとき

おすすめのやり方

  1. 外れ値を削除したモデルと、そのままのモデルを両方試して比較する

  2. 精度だけでなく、「どのような日を予測させたいか」を基準に判断する

  3. もしくは「削除」ではなく「特徴量に外れ値フラグを追加」して、予測の参考情報として活用する手もあります

コメント