F@N Ad-Tech Blog

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

アドテクサービスのデータで時系列解析した話

初めまして、3/5から1週間インターンとしてお世話になりましたt_nakashimaです。
普段は大阪で音声信号処理や機械学習のお勉強をしたりgolangを書くバイトしたりトランペットを演奏したりしています。

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

サポーターズのイベントに参加して声をかけてもらったから。
社員の方に進路の相談に乗って頂いたことも理由の一つです。
交通費・宿泊費支給給料までもらえるという厚待遇、関西ではほとんど見つかりません。

何をしたのか

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

非常に丁寧、しかもLaTeXで作成されたデータ分析・機械学習のテキストを用意してくださいました。
初日〜2日目はテキストに沿ってpythonを使ったデータ分析の基礎を身につけました。
Pythonの基礎から回帰分析推薦システム、文書からの特徴語抽出など幅広いトピックをカバーしており、楽しく学ぶことができました。

広告SDKの組込み

Xcodeを用いて広告表示のSDKに触れました。
広告が表示される仕組み、Swiftを用いたiOSアプリの制作を行いました。
アプリの広告にも様々な種類があること、UIKitを使ったアプリ制作を体験できました。
クロスプラットフォームなアプリを作れるUnityの紹介もしていただけました。
自分でアプリを作成するところまでは手が回りませんでしたが、また機会があれば挑戦したいと思います。

実際のデータを用いた時系列解析

F@N Communicationsのサービスのひとつであるnendのデータを用いてデータ分析を行いました。
2017年10月から2018年3月までの1時間ごとのインプレッション数、コンバージョン数のデータを解析しました。
時系列解析を用いて次のことを調べました。

  • インプレッション数・コンバージョン数は周期性があるか
  • インプレッション数・コンバージョン数はトレンド(上昇傾向・下降傾向)を持つか
  • ARMAモデルによる推定
  • SARMAモデルによる推定・予測

時系列解析はデータを可視化することから始まります。
まずは何も加工していない生のデータを見てみましょう。
f:id:fan_t_nakashima:20180318062133p:plain
インプレッション数は周期性があるような感じがします。
コンバージョン数はランダムな感じです。

次に隣同士のデータの差分をとったデータです。
なぜそんなことをするかと言うと、後で使う予測に都合が良いからです。
f:id:fan_t_nakashima:20180318062137p:plain
今度は元のデータとは違ってインプレッション・コンバージョンともランダムな感じがします。
実際にはどうなっているのでしょうか?

自己相関

自己相関はざっくり言うと異なるデータ同士の類似度を表す量です。
例えば、日本の2017年の気温データと、同じく日本の2018年の気温データで同じ月同士の気温を比べたとき、自己相関が大きくなります。
これが日本同士ではなくて日本とロシアなら気候が大きく異なるので自己相関は小さくなります。

偏自己相関

偏自己相関は自己相関と似ていますが、計算方法が少し違います。
先ほどの気温の例で説明します。
2017年1月の気温と2018年1月の気温との「類似度」を計算するとき、
自己相関では2017年1月, 2月, ... , 2017年3月までのデータすべてを計算に含みます。
それに対して、2017年1月と2018年1月のデータのみで計算します。すなわち、偏自己相関は途中の影響を排除して「類似度」を計算します。

上のグラフの自己相関・偏自己相関を計算してみました。

元データの自己相関・偏自己相関
(左上:インプレッションの自己相関、右上:インプレッションの偏自己相関、
左下:コンバージョンの自己相関、右下:コンバージョンの偏自己相関)
f:id:fan_t_nakashima:20180318062552p:plain

差分データの自己相関・偏自己相関
(左上:インプレッションの自己相関、右上:インプレッションの偏自己相関、
左下:コンバージョンの自己相関、右下:コンバージョンの偏自己相関)
f:id:fan_t_nakashima:20180318062614p:plain

差分データのインプレッションの自己相関を見ると、24個のデータごとに相関が大きくなっています。
元のデータは1時間ごとのデータなので24時間ごとに相関が大きくなっていることになります。
インプレッション数に周期性があることが確認できました。
逆にコンバージョン数には周期性が見られないことがわかります。
青い半透明の帯は95%信頼区間です。
左下:コンバージョンの自己相関のように、青い帯にたくさんおさまっていると次で述べるSARIMAモデルによる推定に向いています。

SARIMAモデル

コンバージョンの差分をとったデータを使ってSARIMAモデルを推定してみます。
SARIMAモデルは今回のような季節変動のあるデータのモデル化に用いられます。
推定したモデルを使ってコンバージョン数の予測をしてみました。
f:id:fan_t_nakashima:20180318230415p:plain
なんかイイ感じに予測できてそうですね…!✨
もちろんこのモデルは万能ではありません。
予測するためのデータをどれだけ用意するか、予測モデルには何を使うか、データがその予測モデルに適しているか、ということを適宜考える必要があります。

参考文献

感想

楽しかったところ

  • 今まで堅苦しいお勉強しかしてこなかったので、実務に触れるという経験ができた
  • 数千行、数万行規模の生のデータを扱って統計分析ができた

苦労したところ

  • 速いSQLクエリの書き方
  • 大量のデータの中から面白い結果が得られそうなものはどれか、を考えること
  • 理論的背景をできるだけ理解しつつ解析を進めること

謝辞

インターンシップを紹介していただいたき、色々な面倒を見ていただいた内田さん、ありがとうございました。
メンターとしてご指導いただいた酒井さん、片桐さん、川崎さん、福岡さん、ありがとうございました。
最後に、ランチに誘っていただいたたくさんの社員の皆さん、ありがとうございました。