$30 off During Our Annual Pro Sale. View Details »

atmaCup#2上位解法をGBDTの気持ちになって考えた

tellmoogry
December 06, 2019

 atmaCup#2上位解法をGBDTの気持ちになって考えた

1. atmaCup#2上位解法
2. XGBoost概要
3. XGBoostの気持ちから見た上位解法

コンペ自体の概要は下記URLをご覧ください
https://atma.hatenablog.com/

tellmoogry

December 06, 2019
Tweet

More Decks by tellmoogry

Other Decks in Technology

Transcript

  1. atmaCup#2 振り返り会LT
    もーぐり@tellmoogry
    atmaCup#2 上位解法を
    GBDTの気持ちになって考えた

    View Slide

  2. 流れ

    1. 上位解法

    2. XGBoost概要

    3. XGBoostの気持ちから見た上位解法


    View Slide

  3. 流れ

    1. 上位解法

    2. XGBoostの気持ち

    3. XGBoostの気持ちから見た上位解法


    View Slide

  4. 1.上位解法概要

    ◯targetからuserごとのtarget平均を引いた値を目的変数に

      雑な解釈

      (人によって同じ睡眠時間でもコンディションの体感違う)

    ユーザー 睡眠時間 コンディション
    (元のtarget)
    user1 4 1
    user1 5 2
    user1 6 3
    user2 6 2
    user2 8 3

    View Slide

  5. 1.上位解法概要

    ◯targetからuserごとのtarget平均を引いた値を目的変数に

      雑な解釈

      (人によって同じ睡眠時間でもコンディションの体感違う)

    ユーザー 睡眠時間 コンディション
    (元のtarget)
    user1 4 1
    user1 5 2
    user1 6 3
    user2 6 2
    user2 8 3

    View Slide

  6. 1.上位解法概要

    ◯targetからuserごとのtarget平均を引いた値を目的変数に

      雑な解釈

      (人によって同じ睡眠時間でもコンディションの体感違う)

    ユーザー 睡眠時間 コンディション
    (元のtarget)
    平均との差分
    (新たに定義したtarget)
    user1 4 1 -1
    user1 5 2 0
    user1 6 3 +1
    user2 6 2 -0.5
    user2 8 3 +0.5

    View Slide

  7. 言われてみれば確かに良さそう...

    でもどこからその発想が出てくるのか...


    View Slide

  8. 懇親会でお話した時のJACKさん

    から頂いたアドバイス


    XGBoostを実装して、差分を予測することを経験したから

    アイデアの1つとして持っていた


    XGBoostのメイン部分だけでも実装することは勉強になる


    View Slide

  9. というわけで...

    XGBoost実装の勉強会をしました!!



    (くるぴーさん         主催)


    少し理解したので、その理解をもとに

    GDBTから解法をみてみます


    View Slide

  10. 流れ

    1. 上位解法

    2. XGBoostの気持ち

    3. XGBoostの気持ちから見た上位解法


    View Slide

  11. 2.XGBoost概要

    XGBoostの中身



    画像引用
    Chen, Tianqi and Carlos Guestrin. “XGBoost: A Scalable Tree Boosting System.” ArXiv
    abs/1603.02754 (2016): n. pag. (元論文)

    View Slide

  12. 2.XGBoost概要

    ◯中身の雑な説明

     1本目の木の中身

      1回目の分岐:年齢が15歳より大きい/小さい

      2回目の分岐:男/女

      (このときloss(後述)が下がる場合だけ分岐させる)


     2本目以降の木では、それまでの木における予測値の残差

     を使って学習を進める


    View Slide

  13. 2.XGBoost概要

    t本目の木に関するlossを表す式(最小化したい関数)



    l : 目的関数 (e.g. RMSE, MSE, …)

    Ω(ft
    ): 正則化(以降は話を単純にするためムシ)

    yi
    :予測値の真値

    :(t-1)本目までの木での予測値

    n: データ数


    参考
    https://qiita.com/kenmatsu4/items/226f926d87de86c28089 (まつけんさんの分かりやすい解説記事 )

    View Slide

  14. 2.XGBoost概要


    1本目の木での予測値はt>1の木に対して影響を与えるので

    一番ウェイトが大きい

    t本目の木に関するloss



    View Slide

  15. 2.XGBoost概要

    1本目の木に関するloss



    1本目の木を作るときは

    葉に割り当てられる値は割り当てられたデータの平均値



    (目的関数lがMSEの場合はそう, RMSEでもなるはず

    違っていたらごめんなさい)


    View Slide

  16. 流れ

    1. 上位解法

    2. XGBoostの気持ち

    3. XGBoostの気持ちから見た上位解法


    View Slide

  17. 3.XGBoostの気持ちから見た上位解法


    これまでの話を踏まえると...



    user_idカラムが圧倒的に大事だとした場合

     →ウェイトの大きい1本目の木で絶対user_idカラム使いたい


    View Slide

  18. 3.XGBoostの気持ちから見た上位解法

    user1
    user2
    Y N
    N
    Y
    user3
    user1の平均

    +2

    user2の平均

    +1.8

    1本目の木でuser_idのカラムだけ使うと

    葉にはuserごとの平均値が出力される


    View Slide

  19. 3.XGBoostの気持ちから見た上位解法

    この場合

    2本目以降の木ではuserのtarget平均との差を予測する

    問題に変わる





    user_idのカラムのみを使って1本目の木を作る

    ≒

    今回の上位解法「平均値との差分をtargetにする」



    2~(t-1)本目の木


    View Slide

  20. 3.XGBoostの気持ちから見た上位解法

    
 (現実)

    targetそのままで学習させただけで同じこと出来る?

    →NO!


    colsample_bytreeやlearning_rate等が邪魔で影響度が落ちたり
    そもそもカラム使われなかったりする

    →GBDTにデータ突っ込むだけでは表現してくれない

    →target平均との差分を目的変数にすることで、明示的に1本
    目の木を定義してあげている


    View Slide

  21. 3.XGBoostの気持ちから見た上位解法

    
 まとめ

    【GBDTから見た上位手法の解釈】

      1本目にuser_idだけを使った木を明示的に差し込む

      (この木だけlearning_rate = 1で特別扱いしたもの)



    leakが怖いので使いどころは難しい...


    targetそのままで学習させたときに、categoricalに指定したカラム
    のFeature importanceが明らかに大きいときは試してみたい


    View Slide

  22. おわり
    XGBoostの実装会やったおかげで多くの学びがありました
    懇親会でアドバイスをくれたJACKさん、実装会開催してくれたくる
    ぴーさんありがとうございました!
    (スライドで変な部分あればご指摘いただけると幸いです)
    参考

    Chen, Tianqi and Carlos Guestrin. “XGBoost: A Scalable Tree Boosting System.” ArXiv abs/1603.02754
    (2016): n. pag. (元論文)

    https://qiita.com/kenmatsu4/items/226f926d87de86c28089 (まつけんさんの分かりやすい解説記事 )
    門脇 大輔, 阪田 隆司, 保坂 桂佑, 平松 雄司「kaggleで勝つデータ分析の技術」技術評論社 


    View Slide