F@N Ad-Tech Blog

株式会社ファンコミュニケーションズ nend・nex8・viidleのエンジニア・技術ブログ

1週間のデータ分析インターンを終えて

こんにちは.
F@Nさんの1週間インターンに参加した にしかわです.
インターンで行ったこと、感じたことを書こうと思います.

インターンに参加した理由

・就活イベントでお話させて頂いた時に社員の方が自社のシステムについて楽しそうに話していたので、自分もこんなエンジニアになりたいと思ったから.
・興味のある分野のインターンだったから.

何をしたのか

CTR予測をしました.
アドテクノロジーについて無知だったため、メンターの方にシステムについて丁寧に教えて頂きました.

SQLにつまずく

社内でのデータベースから特徴量を抽出する際に、SQLを使用しました.
アプリを作る際にちょこっと使ったぐらいのスキルだったので、1日目はほぼSQLにつまずきタスクが進みませんでした.

特徴量のエンコードにつまずく

性別・IDなどはone hotする必要があるので、LabelBinarizerというsklearnのメソッドを使いました.
なぜかエンコードできず、ほぼ1日悩んでいました.
原因がデータがfloat型だったことだと気づいた時は、発狂しそうでした.

ロジスティック回帰を使い、CTR予測

sklearnのLogisticRegressionを使用しました.
精度確認するため、ROC曲線、AUC値、Logarithmic Loss、Normalized Entropyという指標を使いました.
詳しいことはこちらを見てください.
https://tech-blog.fancs.com/entry/ctr-prediction-model-evaluation

カーネルとpcが落ちる

初日はjupyter notebookのカーネルが落ちるたびに驚いていましたが、1週間で普通のことだと悟りました.
しかし、pcが落ちるのは絶望ですね...
ダウンサンプリング大事

k-meansで新しい特徴量を作ってみる

特徴量の種類が少ないことが問題ということなので、既存の特徴量を用いて新しい特徴量の作成に挑みました.
サイトIDを使い、クラスタリングを行ってラベルを抽出しました.
以下が結果です.
campaign_id,frequencyを適用
AUC = 0.6726877465581093
Logarithmic Loss = 1.4451557532902062
Normalized Entropy = 2.700788250592528

campaign_id,frequency + 作成した特徴量
AUC = 0.6678840993331718
Logarithmic Loss = 1.366609496859506
Normalized Entropy = 2.6290588331512277

ちょっとよくなってる!

作成した特徴量の傾向を眺める

f:id:fan_a_nishikawa:20180831181154p:plain
gender 1は男性、2は女性を表しています.
クラス1は男性が多くて、2は女性が多いことがわかります.
サイトIDから性別をちょっとだけ予想できることを発見しました.

まとめ

とても良い環境でインターンをさせてもらえた

わからないことだらけでどうなることやらと思っていましたが、メンターの方が丁寧に教えてくださったので、なんとかタスクを進めることができました.
もくもくと作業したい時はほっといてくれるので、自分にとってとても作業しやすい環境でした.
あと、隣の席のインターン生がとても優秀だったので、色々教えてもらいました.←良い刺激になりました!

つまずくことが多かったですが、その分技術力を身につけることが出来ました!
メンターのt_sakaiさん、y_kawasakiさん、面倒を見てくださったa_uchidaさん、ランチに連れて行ってくださった社員さん、本当にありがとうございました.