201808_KaggleCoursera

WEEK 1

MLの基礎

  • Vowpal Wabbit: 巨大なデータセットを処理するのが得意
  • GDBT
  • 最初の木の間違いを後で直していく
  • 最初の木を削除しちゃうと、後の木だけで結果出すとバイアスがひどい
  • RnadomForest
  • 半分の木の数の2つのモデルでアンサンブルしてもたいして精度は変わらない

pandas

df.date = pd.to_datetime(df.date, format='%d.%m.%Y')
df['day'] = df.date.map(lambda x: x.day)
df_sep14 = df[(df['year'] == 2014) & (df['month'] == 9)]
df_sep14['revenue'] = df['item_price'] * df['item_cnt_day']

# goupbyオブジェクトにsumすると合計が出る
df_sep14_grouped = df_sep14.groupby('shop_id')
df_sep14_grouped.sum()

# in は isin
df_summer14 = df[(df['year'] == 2014) & (df['month'].isin([6, 7, 8]))]

# count distinct
nu = df['state'].nunique()

数値データの前処理

Tips
  • 採用するモデルによって前処理の方法は変えよう
  • 線形モデルと決定木モデルでは必要なデータが違う
  • 異なる前処理を行ったモデルを混ぜると効くことがある

スケーリング
  • to [0,1]: MinMaxScaler
  • to mean=0, std=1: StandardScaler
  • 線形モデルではどっちでも変わらん / kNNは結構影響ある
  • 決定木は関係ない

異常値排除: outliers
  • 99%タイルにクリッピング
upperbound, lowerbound = np.percentile(x, [1, 99])
y = np.clip(x, upperbound, lowerbound)

rank transformation
  • outliersをしこしこ処理できないときはrankに変換してしまう
  • kNNやNNはこの変換が効く
scipy.stats.rankdata

log transformation
  • NNに激しく効く