1st Place Solution (Team:hat_trick | senkin13 & BIZEN)

はじめに

今回のYouTube動画視聴回数予測コンペはとっても面白いtopicで、cvとlbも結構マッチで、すごくいいコンペでした。ProbSpaceの運営の方々に感謝申し上げます。また、参加者の皆さん、お疲れさまでした。チームメイトBIZENさんの強力なstackingとわたしのtrickの相乗効果が大きくて、優勝までできました。

Trick/Submodel

likes|dislikes|commentがdisableされたデータは全体13%くらい、この13%部分の精度が他の87%部分より結構落ちる、原因はlikes、dislikes、commentが視聴回数との相関が強いので、disableさられと重要な情報が失われた。こういう情報を利用するため、別の三つモデルを作ってlikes|dislikes|commentをそれぞれ予測して、予測値は元の値を入れ替えて(元の値も残る)、元の値と予測値の差分、さらに元の値と予測値に基づいて大量なaggregation特徴量を作れます。結果的にsingle model のcvが0.01くらい改善できました。BIZENさんのモデル予測値と結構違うので、stackingに絶大な効果があります。チームマージ前のcv0.710からチームマージ後のcv0.690前後改善できましたの最も重要な要因です。
# use predicted dislikes,likes,comment_out
dislikes_pred = pd.read_csv('dislikes_pred_0623.csv')
likes_pred = pd.read_csv('likes_pred_0623.csv')
comments_pred = pd.read_csv('comment_count_pred_0623.csv')
df = df.merge(dislikes_pred,on=['video_id'],how='left')
df = df.merge(likes_pred,on=['video_id'],how='left')
df = df.merge(comments_pred,on=['video_id'],how='left')
df['diff_dislikes'] = df['dislikes'] - df['dislikes_pred']
df['diff_likes'] = df['likes'] - df['likes_pred']
df['diff_comments'] = df['comment_count'] - df['comment_count_pred']
df['original_dislikes'] = df['dislikes']
df['original_likes'] = df['likes']
df['original_comment_count'] = df['comment_count']
df.loc[df['ratings_disabled']==True,'dislikes'] = df.loc[df['ratings_disabled']==True,'dislikes_pred']
df.loc[df['ratings_disabled']==True,'likes'] = df.loc[df['ratings_disabled']==True,'likes_pred']
df.loc[df['comments_disabled']==True,'comment_count'] = df.loc[df['comments_disabled']==True,'comment_count_pred']

Feature Engineering

dislikes&likes&comment_out&timestamp のinteraction 特徴量
dislikes&likes&comment_out のaggregation特徴量
テキストのaggregation特徴量
テキストのtfidf->svd
テキストの中にkeywordあり、なしのbinary特徴量
Target Encoding

Validation

StratifiedKFold by y_bin
train['y_bin'] = pd.cut(train['y'], [0, 10, 100,1000,10000,100000,1000000,10000000000], labels=[1,2,3,4,5,6,7])

Stacking

5aca4746-af39-4748-b6a8-dc4c83963cdc.png

Notebook

https://github.com/senkin13/kaggle/tree/master/probspace_youtube

※コードにはファイル名に項番を降ってありますので項番順(同一項番は順不同)に動作させる必要があります。全コードを動作させると、(CPU: 32コア/GPU: RTX2080Ti x 1)で延べ12〜13時間程度を要します。

Favicon
new user
コメントするには 新規登録 もしくは ログイン が必要です。