0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

欠損値(NaN)をフラグ化したら予測精度が改善したTip

Posted at

OpenStreepMa(OSM) API から施設情報などを取得し、特徴量の候補にしようとして、
欠損値をそのままモデルにいれるよりも、欠損値フラグ列 を追加するだけで、大きく精度が改善した。

オープンデータを使うと、「本当にゼロ」なのか「データ取得できなかっただけ」なのかをどう扱うかは、モデル精度に大きく影響することがわかった。

TL;DR

  • 0 = 存在しない(意味のある観測値)
  • NaN = データ取得できなかった(情報不足)
  • NaNフラグを追加すると精度改善することが多い

モデル

  • モデル
    • LightBGM
  • 精度指標
    • RMSE

1. 0NaNは区別する

  • 施設が存在しない → 0
  • データを取得できなかった → NaN
# OSMから施設数が取れなかった自治体フラグ
df['OSM_missing'] = df[['駅密度','スーパー密度','病院密度','学校密度']].isna().all(axis=1).astype(int)

2. NaNフラグを追加する

LightGBMにNaNを渡すだけでも動くけど、NaNフラグ列を加えた

image.png

Before After
image.png image.png

💡R²が2倍以上改善!

まとめ

  • 0は0、NaNはNaNとして扱う
  • NaNフラグを追加するとモデルが「欠損そのもの」を学習できる
    • 欠損値処理はただの前処理じゃなくて、特徴量エンジニアリング
  • オープンデータ・地理データでは有効?!

まだまだR²が低い。ベースライン作成がんばろ…

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?