FANCOMI Ad-Tech Blog

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

機械学習しかしていなかった高専生がアドテクの会社に来てみた

こんにちは、1週間のインターンでお世話になっているk_arimuraです。
普段は熊本でバイクに乗ったり研究で少し機械学習をしてみたりしています。

そんな中、今まで全く触れたことのないアドテクの世界をインターンを通して少しだけ覗いてみました。

参加したきっかけ

なんとなく就活を早めに始めて色んな会社を見ようと思って、初めて就活イベントに参加したことがきっかけでした。
その時に参加したのが12月に京都で開催されたサポーターズのエンジニア向け1on1面談会。
supporterz.jp

色々な企業とお話しさせていただいた中、自分が全く触れたことがないのに生活の中に溶け込んでいるアドテク業界にすごく興味を惹かれ、今回のインターンシップを参加させていただきました。
(あとは、面談させていただいた方がバイク好きで話がめっちゃ盛り上がったのも大きかった。)

1週間で何をしたのか

データ分析・機械学習の基礎

とてもありがたいことに、データ分析・機械学習のテキストを用意してくださっており、初日はその流れに沿って基礎基本を叩き込みました。
今まで機械学習を少し触ったことがあったのですが、データ分析の部分からしっかりと勉強したのは初めてでした。
また、普段使わないライブラリにも触ることができ、ここまで丁寧にしていただいていいのだろうかと思いましたがとてもありがたかったです。

実際にデータを使ってCTR予測

正直、びっくりしました。
事前にインターンシップの内容としてデータ分析とか機械学習をしようか、というお話しはいただいていたのですが、まさか生のデータを使って行えるとは思ってもいませんでした。

全くアドテクに関する知識がなかったのでCTRって何?って状態からスタートしたのですが、その辺の話から詳しく教えていただけたので安心しました。
CTRって何?って方はクリック率(CTR)とは | SEO用語集:意味/解説/SEO効果など [SEO HACKS] こちらを参考にしていただければいいのですが、要は広告見た人がどれだけクリックするかってことらしいです。

ビッグデータの洗礼を受ける

ビッグデータの洗礼を受けました。二日間くらいまるまる受けました。

予測に用いたデータは数百万件程のデータでしたが、今までそこまででかいデータを扱ってこなかった私はまずその扱いで苦労しました。
数万件とか数十万件であればある程度メモリがどうこうは(あまりよろしくはないが)無視しても動くことが多いですが、数百万件とかになると話が違って来ます。
使い終わった変数どうするかとかそこまで普段から意識していればよかったのですが全くそんなこと意識したことなかったので何回もJupyterのカーネルが落ちました。

具体的に何をしたのか

現状のCTR予測では機械学習を使っているものの、すごくシンプルなモデルを使っているそうです。
なので、現在世の中に出ている機械学習方法を使ってCTR予測を行おうというのが今回メインで行った内容でした。

なお、前半1日を基礎の習得、その後二日をビッグデータの洗礼を受けて過ごしていたので実際に検証できたのは1.5日くらいでした。
短期インターンの辛いところですね。

ロジスティック回帰

線形回帰にシグモイド関数を当てて出力の幅を(0 ~ 1)の範囲に当てはめた回帰モデルです。
今回のCTR予測問題のような押すか押さないかといった値を2値分類問題として扱う際によく用いられます。
xを入力、wを重みと考えると数式で表すと、以下のように表されます。
h(w^{T}x)=σ(w^{T}x)=\frac{1}{1+e^{(-w^{T}x)}}

MLP

先ほどのロジスティック回帰では入力に対して出力が1つある、といった形でしたが、Multi Layer Perceptron(略称:MLP)では、入力に対して中間層、出力層を持ちます。
最近流行りのディープラーニングなんかもこれを元に発展していったモデルですね。
今回は期間も短く、また計算に使用できるのが手元のノートPCのみといった状況だったので、かなりシンプルなモデルで学習を行わせました。

ランダムフォレスト

こちらは上二つの物とはかなり性質の違う、少し特殊なモデルです。
決定木と呼ばれる物で、ビジネスなんかでは決定理論の分野なんかで使われたりするそうです。(Wiki調べ)
ランダムフォレストとは名前の通り森です。木が集まっています。

検証結果

今回は1日分のデータを用いて、その内の8割を学習に、2割をテストに使いました。
また、比較用として3日分のデータで学習させたもの、7日分のデータで学習させたものも用意しました。
以下に、各モデルの結果を示します。(空欄は計り忘れです)

AUC LogLoss NE
ロジスティック回帰(scikit-learn) 0.673 0.152 0.957
ロジスティック回帰(Keras) 0.672 0.152 0.957
MLP 0.671 0.152 0.961
ランダムフォレスト 0.649 0.266 1.679
MLP(3日) 0.688 0.148 0.950
ロジスティック回帰(7日) 0.685 0.951
MLP(7日) 0.693 0.946

表の中に出ているパラメータですが、

AUC Area under the curve 予測した際のROC曲線の下側部分の割合を表しており、CTR予測では大きい方が良いとされている。
LogLoss Logarithmic Loss 予測値と正解との距離を対数とった値で、小さい方が良いとされている。
NE Normalized Entropy モデルによって予測されたLogLossを、平均から予測されたCTRのLogLossで割った値で、小さい方が良いとされている。

以上の結果からランダムフォレストはCTR予測には向かないのかなーといった結果になりました。
また、今回シンプルというか何も考えていない構造のMLPが教師データ量が増えるとともに精度を上げていたので検証の価値があるかなと思いました。
(ただ、同じ期間からデータをランダムでsplitしているので過学習になっている可能性あり。)

インターン全体を通して

感想

短期間でしたが、ここまで技術的に苦労しながら色々身についたのは初めてな1週間でした。
もともとデータサイエンスに興味があり色々やろうと思っていましたが、実際にどういった分析をしているのか、どういう情報が求められているのかが中に入って初めてわかったので、これからの方針を決められそうです。
それと、アドテクの分野の事も少し触れる事ができ、常に新しい技術で更新されていく素晴らしい世界だなとすごく心を惹かれました。

また、社員の方もとても優しく、メンターの方にも気にかけていただきアドバイスを色々といただけたので安心してチャレンジすることができました。
あとお昼ご飯めっちゃ美味しかったです。ごちそうさまでした。
趣味のバイクのことで盛り上がったり、ラーメンが好きということを伝えたらラーメンに連れていってくださったり、おかげ様で充実した1週間を過ごすことができました。

遠方からでもインターンに参加できてしまった

インターンで来ています、あらかわです。
ブログを書く機会をいただいたので、僕のインターン生活について少し綴ろうと思います。


【もくじ】

  • どうして来ることになったのか
    • 出会いは突然
    • 助かります!
    • なんだなんだ!?
  • 何をしたのか
    • これが機械学習ってやつか
    • 超興奮した
    • 自由にさせてもらった
  • 幸せを感じた
続きを読む

手帳派のわたしが、スケジュールアプリを作った話

こんにちは!
インターンでお世話になっている a_ota です。

普段は、女子大なので周りに女子しかいなくて、男性の多い職場で働くことに新鮮味を感じています。

  • インターンに参加した理由
  • 作ったもの
    • 仕様
  • 感想
    • 初めのうち
    • swiftの難しさ
    • 苦労したところ
    • 楽しかったところ
  • 終わりに
  • メンターからのコメント
続きを読む

無料のeラーニング「Aidemy」をやってみて、ディープラーニングでひらがなを分類してみた。

皆様新年あけましておめでとうございます。冬場は毎日在宅勤務したいh_matsumotoです。最近無料でディープラーニングを学べるという「Aidemy」をやってみました。とても勉強熱心なので、12月24日と25日を丸々費やしてみました。決して予定が空いていた訳ではないと思います。

aidemy.net

Aidemyではディープラーニングを利用して、0~9までの数字を分類する方法を学ぶ事が出来ます。
f:id:fan_h_matsumoto:20171226162033p:plain

今回はそれを応用して「ひらがな」を分類してみたいと思います。

【目次】

  • 1 ひらがなデータの入手
  • 2 画像データを配列にする
    • 使用言語
    • 使用ライブラリ
    • zipファイルをダウンロードし展開。画像ファイルを読み込み、特徴量とラベルデータを作る。
    • 閾値処理(二値化)について
  • 3 分類してみる
  • 4 結果の確認
  • 最後に
続きを読む

Processing.pyによるデータの可視化について

こんにちは、弊社で2ヶ月間インターンとして働いているg_takahashiです。
データの美しい視覚化に取り組んでいました。まとめていこうと思います。言語は Processing.pyです。Verは3.3.6です。

紹介する内容

  • Processingってなんですか?
  • 作成されたもの
  • 詰まった所と学習法
  • ArtとVisualizationの違い
  • 2ヶ月インターン総括

続きを読む