# 機械学習ルーティーン(特徴量編) ## 欠損をどうするか考える [欠損値確認方法](https://note.nkmk.me/python-pandas-nan-judge-count/) 欠損値が 1. 特徴なし→そのまま 2. ランダムに発生→代表値で埋める 3. ほかの変数と関連→予測 4. 何らかの理由を持っている→欠損値から新たな特徴量を作成 ## 数値変数の変換 モデル作成時にテストデータが 1. そろっている→学習データで変換 2. そろっていない→学習、テストデータで変換 ### 線形変換(変数の分布が伸縮、形状は変化しない) 1. 変数同士のスケールの差が大きいとき→標準化 2. もともと範囲が決まっている変数→Min-maxスケーリング ### 非線形変換(変数の分布の形状を変えたい(偏ってない方がいい)) 裾が伸びたような変数→対数変換、box-cox、など(kaggle本参照する) ### 外れ値がある→clipping ### データに関する知識があり、どのような区間に分けるべきかの見当がついてる→binning ### 数値の大きさ間隔をあえて捨て、大小関係のみを抽出したい→rank関数→Rankgaussで正規分布に ## カテゴリ変数の変換 ### 最初に テストデータにのみ存在するカテゴリがあるかどうかを確認する もしあるなら 1. そのレコードが少ない(影響を与えないと判断)→無視 2. 最頻値や予測によって補完 3. 変換を行うときに、その返還における平均といえる値を入れる カテゴリ変数の水準が無意味な記号ではなく、何かの意味を持っている場合→意味を抽出 ### モデルごとに適した形への変換が必要 * GBDTや決定木→label-encoding(簡単)、target-encoding(リークの危険性を考慮)が有効 * その他→one-hot-encoding * ニューラル→embeddingも考えてみる ## 日付、自刻データの取り扱い 1. 学習データの期間を限定するのに使う(直近のデータの限定する方が、よいモデルが得られる場合もある) 2. 学習データの特徴量と目的変数の関係性がテストデータの期間でも同じようになっているか ex.テストデータは冬の期間なのに、学習データは夏の期間、目的変数によっては影響が出るかも 3. 周期的な変動をとらえる(その特徴を捉えられる十分なデータがある場合など) 4. ある時点との時間差を特徴量とすることも考える(例、築年数) ### 日付時刻を表す変数の変換 kaggle本p156参照(祝日、正月やクリスマスなどの特別な日の取り扱いには要注意!!) ## 変数の組み合わせ ### 複数の変数を組み合わせることで、変数同士の相互査証を表現する特徴量を作成できる。 ### データに関する背景知識を利用 ### モデルから出力される特徴量や相互作用の重要度をもとに考察し指針とする) ### 数値変数✖カテゴリ変数 カテゴリ変数の水準ごとに数値変数の平均や分散を取る ### 数値変数✖数値変数 加減乗除で新たに特徴量作成する。(GBDTの場合加減よりも乗除の特徴量を加えた方が、モデルが反映できてなかった部分を補完しやすい) ### カテゴリ変数✖カテゴリ変数 操作:文字列として変数同士を連結したうえで、変換(target-encodingが望ましい、しかし過学習に注意) ## 他のテーブルの結合 kaggle本p163参考 ## 一対多のデータの扱い(集約して統計量を取る) kaggle本p167参照
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up