Upgrade to Pro — share decks privately, control downloads, hide ads and more …

atmacup8 振り返り会登壇資料

Sekine Hiroto
February 25, 2021

atmacup8 振り返り会登壇資料

Sekine Hiroto

February 25, 2021
Tweet

More Decks by Sekine Hiroto

Other Decks in Science

Transcript

  1. atmacup 8
    振り返り会
    Sekine Hiroto

    View Slide

  2. ● Sekine Hiroto
    ● twitter: @ndnto
    ● github: @hiroto0227
    ● 大学では自然言語処理を研究
    ● 20卒でWantedly, inc.にJoin。(推薦やデータサイエンス)
    趣味
    ● ビール (特に海外ビール)
    自己紹介

    View Slide

  3. 目次
    ● 今回のコンペの進め方
    ● 作成した特徴量
    ● 今回できなかったこと

    View Slide

  4. ● データ分析コンペを始めるのには最適!
    ● 1週間という短い期間で集中して取り組む!
    ● ディスカッションに知りたかったことやアイディアが丁寧に書かれている!
    atmacupへの印象
    今回も多くのディスカッションを参考にさせていただきました
    - RMSLEを最適化する小技
    - シリーズ名ごとにGroup KFold

    View Slide

  5. 進め方
    ● @hakubishin3 と @yu-ya4 とチームを組んで進めた。
    ○ チームを組んだ目的としては、 @hakubishin3 から知見を共有してもらう。
    ○ 初日の夜に効きそうな特徴量を聞いて、そこからは個人でガンガン。
    ● まず始めにSubmit!
    ○ 初心者にとってはここが難関 -> 1日集中してサブミットまでできる仕組みを作成。
    ○ Data Load, Preprocessor, Model, Training, Predict, Submit
    ● 特徴量を自由に追加できる形にしておく。
    ○ 1つの関数で1つの処理を行う。
    ○ 関数の入力、出力を合わせておくことで、 for文で回せるようにする。
    ● そこからは、アイディアと面倒くさがらずにできるかの勝負!
    ○ 効きそうな特徴量から作っていく。

    View Slide

  6. 作成した特徴量
    ● Aggregation Feature
    ○ カテゴリ変数(PublisherやDeveloper, Nameを含む)ごとに、Year_of_ReleaseやCritic_Scoreなど
    に対し集計処理
    ● Diff Feature
    ○ Aggregation Featureの集計した平均値と各レコードの平均値の差をとる。
    ● Target Encoding
    ○ カテゴリ変数ごとに、 xx_Salesに対し集計処理
    ○ DeveloperやPublisherを入れたらリークした。
    ● LDAによる分散表現
    ○ 分散表現にすることで、 Aggregation Featureでは与えられないような角度からの特徴を得たい。
    ● Rank Feature

    View Slide

  7. PublisherとDeveloperについて
    ● TrainとTestの分け方がPublisherによって分割されていると想定
    ● Publisherを直接使用したところ、CVの値は劇的に上がったが、LBの値が下がると
    いう現象が起きた。
    ● 「Nintendo」というPublisherを使用できる特徴量で表現したい。
    ○ UserScoreの平均が高く、幅広いジャンルのゲームを作成している
    ○ ここでGlobal_Salesが多いという情報を使用してしまうと、それを TestデータのPublisherで再
    現することはできない。
    ● Publisherごとに特徴量の平均、分散、パーセンタイル値、Countなどの集計値をと
    る。

    View Slide

  8. データをざっと見る。
    ● PlatformやGenreやPlatformはユニーク数も少なくTrainとTestに満遍なく入ってい
    たため、そのまま使用することができた。
    ○ Target EncodingもPlatformごとやGenreごとなどで使用できた。
    ● Critic_ScoreやUser_Scoreなどは50%程度欠損値である。
    ● DeveloperやRatingについても欠損値が多かった。
    ● このNull値を補えるように特徴量を作成したい。

    View Slide

  9. 力を入れたところ (Series Nameの名寄せ)
    ● どこまでをシリーズとみなすかがゲームによって異なる。
    ○ LEGO Batman を LEGOとするか? LEGO Batmanとするか?
    方法
    ● Nameの最初から5gramを見る。
    ○ 3回以上出現した5gramがあれば、辞書に追加
    ● Nameの最初から4gramを見る。
    ...
    ● Nameと辞書にマッチするもののうち、最も単語数の
    多いものをそのシリーズ名とする。

    View Slide

  10. RankFeature
    ● 各カテゴリごとにYear_of_Releaseを並べたもの
    ● AggregateFeatureばかりを作成していたため、同じカテゴリのものは同じ特徴量と
    なってしまうことを変えたかった。
    ● Year_of_Releaseが同じ場合は登場順でランク付けを行う。
    ● Genre_Year_of_Releaseのカテゴリでランク付けを行った。
    ● リークにつながり、Public Scoreが0.78から0.69に上がった。
    最も効いた特徴量

    View Slide

  11. View Slide

  12. Feature Importance

    View Slide

  13. 今後に向けて必要だと感じたところ
    ● Preporcessingのクラス
    ○ 特徴量が多くなってくると、各特徴量の依存関係の整合性が合わなくなりそう。
    ● 特徴量のNaming
    ○ Aggregation Featureなどは、何のカラムを Group Byして、何のカラムに対しての平均なのか?と
    いうのをルールとして決めておくことで、理解度や Namingの迷いがなくなる。
    ● 何の特徴量がなぜ効いてるか?
    ○ 初めは特徴量を作成して学習させて、後からなぜそれが効いたのか、効かなかったかを考えようと
    したが、後半はスコアを伸ばしたい気持ちが強くて、なぜ効いたかを考えられなかった。
    ● 特徴量作成のネタ切れ

    View Slide

  14. ありがとうございました!
    楽しかったです!!

    View Slide