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

「変化していくユーザを検知し改善を行う分析基盤の話」@「Gunosyの急成長を支えた技術チーム...

Gunosy
September 26, 2014

 「変化していくユーザを検知し改善を行う分析基盤の話」@「Gunosyの急成長を支えた技術チームの取り組み実例を大公開!」

「【人気のため増席しました!】Gunosyの急成長を支えた技術チームの取り組み実例を大公開!」での発表資料
http://eventdots.jp/event/160791

Gunosy

September 26, 2014
Tweet

Other Decks in Technology

Transcript

  1. 自己紹介 吉田 宏司(よしだ こうじ) •  開発本部 DAUチーム エンジニア •  業務

    データ分析、KPI管理 記事評価・配信ロジック、推薦システム、クローラ APIサーバ、Webサーバ その他雑用
  2. グノシーの分析基盤、インフラの歴史 KPI算出とアドホックな分析を行う •  定常的な夜間KPI算出 •  朝起きると集計が終わってて欲しい •  非定常的に発生するアドホックな分析 •  古いデータもいつでもすぐに触りたい

    サービスの成長に伴い、大きく3回リニューアルしてきた 1.  創業当初 •  MySQL 2.  アプリリリース直前 •  fluentd + mongoDB + S3 3.  データ多すぎ対策後 •  2 + Redshift 4.  ネクストフェーズ… •  リアルタイム、Amazon Kinesis、、、
  3. 創業当初の分析基盤  1. 創業当初 •  状況 •  ユーザ数1万人程度 •  iOS/Androidアプリリリース前のWebとメールのみの時代 • 

    同時アクセス数は少ない。何とかKPI算出できるもの。 •  やってたこと •  MySQLのloginsテーブルに、アクセス時に同期処理でインサート •  必要なKPIを夜間バッチでPythonで算出 •  KPIツールはRailsで構築
  4. アプリリリース直前の分析基盤 2. アプリリリース直前 •  状況 •  ユーザ数、数万~数十万程度 •  iOS/Androidアプリユーザがほとんど • 

    毎日定刻に大量のアクセスがくる。アクセスの度にMySQLにイン サートするのやばい。 •  やってたこと •  MySQLを用いたKPI算出の排除 •  fluentd + MongoDB + S3導入 •  KPI集計は毎日1回の夜間バッチJavaScript+ Python。 MongoDBのmap reduce多用していた。
  5. データ多すぎ対策後の分析基盤 3.データ多すぎ対策後の分析基盤 •  状況 •  ユーザ数、数十万~数百万 •  Mongoのmap reduce遅すぎ。朝になっても終わらないKPI集計。 • 

    あふれだすデータ •  いつからかWAUの伸びが鈍化し始める… •  Mongo見てみると、消えていっていた(capped collection) •  あふれたデータを使用するのが面倒 •  古いデータを分析する時に、S3に上がったデータを一回落として きて、ゴニョゴニョ。。 •  やってたこと •  MongoDBからのKPI算出の排除(本当は少し残ってる) •  MongoDBは一時データ保管場所として、軽く触りたい時に使用 •  KPI集計、過去データを用いた分析はRedshiftを用いて行う
  6. ネクストフェーズの分析基盤 4. ネクストフェーズ •  状況 •  ユーザ数、数千万~ •  やろうとしていること • 

    リアルタイムに数値算出 •  「ログをAPIで受けるのはもうやめる。アプリ to Amazon Kinesis だ」
  7. グノシーでの分析と改善タスクの流れ 基本方針 •  「数字は神より正しい」(Gunosy Way) •  分析と改善の目標を数字で明確にする。 •  「迷ったら挑戦しよう」(Gunosy Way)

    •  小規模に進めて、数値を見ながら拡大していく。 •  複数の施策を並行しながら、どんどん進め、効果の大きそうなものがあれば全力注入する。 タスクの流れ •  目標設定 •  仮設立案 •  簡易実験 •  自動化 参照 「B to Cサービスの現場から考える機械学習活用 #MLCT by ysekky」 https://speakerdeck.com/ysekky/b-to-csabisufalsexian-chang-karakao-eruji-jie-xue-xi- huo-yong-number-mlct
  8. 登録フロー簡略化 アプリでも、SNS + メールは必須にした •  「アプリ単体だとユーザ定着しなそう。」 登録ユーザ数 / インストール数 が低いことに気づく

    •  リリース直後は、Webで使用していたユーザがアプリをダウンロー ドする割合が多かったため、登録ユーザ数 / インストール数が低 いことを問題視していなかった アプリユーザにメールによる呼び戻しは効いていなかった •  メールを開封しただけのユーザもDAUに加算していた •  アプリで登録したユーザはメールを開封していても記事を閲覧す るユーザは少なかった => メールは開いてもそのまま削除が大半
  9. 登録フロー簡略化 メールアドレス無しでも登録可能にした •  登録ユーザ数 / インストール数 は向上 そもそも継続率の定義を誤っていた •  登録ユーザ数を分母にした継続率(アクティブ数

    / 登録ユーザ 数)は低下した •  インストール数を分母にした継続率(アクティブ数 / 登録ユーザ 数)は向上した •  実際に伸ばすべきは後者 Web時代と違う登録フローと用意し、インストールしたらすぐニュース が読めるカタチに落ち着く
  10. データの少ないユーザ対策 SNS単体から取得出来るデータ量には制限がある •  分析手法を変更し、データ量を増やそうとした •  データは増えたが、継続率は向上せず… 登録後のアンケートで足りないデータを補充することにした •  アンケート画面を追加すると、そこでの離脱も当然生まれる • 

    複数のアンケート方法、デザインをテストした •  推薦精度の向上による継続定着 > アンケート画面での離脱 グノシーといえば全自動みたいな考えがあったが、自動化にユーザに 入力を混ぜて継続率向上させることが出来た
  11. グノシーの苦手分野攻略 記事収集できてないのでは? •  ジャンル別の記事数を可視化して毎日チェック •  少ない分野はTwitter観察したり、雑誌見てみたりして、記事 ソースを探していった 面白い記事が推薦されにくいのでは? •  推薦されやすい記事とクリック率の高い記事があっていなかっ

    た •  ロジックを変更するのは大変 •  とりあえずクリック率が高い記事が推薦されやすいように、クソ ヒューリスティックスを多数導入 •  謎の係数かけたり、人力で記事データ変更したり 機械学習使ってロジック作るのもいいけど、スピード優先で人力で試す