1
/
5

今、Kaizen Platformで働くことが楽しい! ~ 3年間働いてきて感じる現在の高揚感 ~

Kaizen Platformでアプリケーションエンジニアをしているフナミです。

2016年の後半はKaizen Chatの開発を担当し、RailsでAPIつくったり、iPhoneアプリの実装をしていました。Kaizen Chatは無事リリースできたのですが、その次のプロジェクトとして昨年末から着手した新しいプロジェクト "Issue Finder" の話をします。

Issue Finderとは

一言でいうと、ログデータからサイトの課題を発見すること。

Kaizenのログデータは、A/Bテストの結果を判定するために、以下の図の流れにあるページ群に埋め込まれた JavaScriptコード(以下JS) を経由して取得されています。



そして、集められたログデータを集計すると↑のように、どのデザイン案が優れているのかを判断することができます。

さて、A/Bテストを実施するためには、どこで、A/Bテストを行うのか?を決めて、仮説を立てる必要があるのですが、この「どこで」と「仮説」を見つけるにはどうすれば良いのでしょうか? そのためには、Kaizenのログとは別に、Google AnalyticsやAdobe Analyticsのようアクセスログ解析ツールの集計データをもとに、どのページに課題があって、どんな仮説を立てれば良いのかを個別に探して行く必要があります。課題はどこか?については、これまでは、お客様の担当者とKaizenのカスタマーサクセスのメンバーで、ログデータ等を見ながら人手で判断しています。しかし、ここを人手に頼っていると、サイト全体を網羅して、課題ページを発見することは困難です。

そこで、Kaizenでは新しい仕組みとして、これまで人力で蓄積してきた課題発見のノウハウを整理し、「課題発見ロジック」をプログラムとして実装し、自動的に課題が発見できるようにしようと考えました。そのためには、A/Bテストの対象ページだけでなく、顧客のサイト全体からログデータを収集し、ページ間の相互の関連性や、ユーザーの行動を解析し、どこのページに課題があるかを発見できるようにしようとしています。

1. KaizenのJSをまずサイト全体に貼っていただく。

2. JSからログが送信&収集され、定期的に課題を探す。

3. 課題が見つかったらすぐにデザイン案を見つけA/Bテストを始める。(さらに最近追加されたインスタントオファーを使えば、一部画像の差し替えも行える)

という流れになります。

そして、この「収集されたログから定期的に課題を探す」ことがIssue Finder機能となります。

初めてのSparkと初めてのPython

そして、自分はこのIssue Finderのエンジン部分の開発を担当しています。

各サイト内のページに貼られたJSから、刻々とログデータが送られてS3に随時書き出されています。

このログには、ログ解析ツールではお馴染みの、ユーザー毎にどのページを見たのか、UserAgentやIP等の情報に加えて、A/Bテストで選ばれたデザイン案や、クリックされた場所が特定できるDOMの情報も含まれています。このDOMの情報があることで、ページ単位だけでなく、クリエィティブ単位で課題を見つけることができるようになっているのが特長です。



関連: イベントトラッキング計測イメージ

さて、このログ、結構大量にあります。で、大量のデータから定期的に課題を発見するために、各種ロジックをもとに集計し続ける必要があります。大量のデータを集計するためにはいろいろ方式がありますが、今回はApach SparkをAmazon EMR上で動かすという選択をしています。対抗馬としては、BigQueryでクエリー組み立てて、Rubyプログラムから操作する等、複数あったのですが、クエリーが複雑化巨大化することが予想されたので、メンテナンス性を考えて、Spark DataFrameを選択。(この辺はCTOの経験と勘に賭けてるとこもある)となると、言語はPython、 Scala、Javaになるのですが、データ解析ライブラリも充実しているし、Rubyに一番近そうなPythonを選択しています。

そんなこんなでSparkとPythonを触り始めることになったのですが、PythonはGAEが最初にリリースされた2008年ごろに少し触った程度。SparkやMapReduceは2013年ごろに少し触った程度。両方ほとんど、未知の領域。

でも、これがあれば、大量データをサクサク解析できて、埋もれていた課題を発見できる基盤になれそうということで、新しい道具と言語に挑戦することになりました。

ちゃんと、買いましたよ「初めてのSpark」と「初めてのPython」




久しぶりにO'REILLYの初めてシリーズ本を買いましたが、楽しい〜。もちろん、初めての言語、環境だと、うまくいきそうでいかないことにもちょくちょく出会うのですが、なんとか解法にたどり着いてレベル上げしてる感じは楽しいです。Pythonについては、インスタンスメソッドの第一引数にselfがくるところなんて、懐かしのPerlのようだとほくそ笑んだりしております。SparkもPythonも最新の流行ものではないですが、初めて触るのはやっぱ、ワクワクです。

そして今回のワクワクは、今まで埋もれていて発見されなかった課題を見つけることができる、ということも大きく作用しています。3年間のA/Bテストの実施のなかで人手によって蓄積されてきた課題発見力が、ロジックとしてプログラム化され、大量のログデータから自動的に課題を見つけることができそうになりつつあるという点です。

2017年春のリリースに向けて、Issue Finderの開発は続きます。これまで見つかっていなかった課題を見つけ、さらにKaizenの効果を高められるようになるのは、もうすぐです。たのしみながら、コーディングします!


一緒にチャレンジする仲間を募集中です!

- 世界中のWebサイトのUI改善を加速させるProduct開発エンジニア

- KaizenのReact使い"axross"とプロダクト開発しませんか?

Kaizen Platformでは一緒に働く仲間を募集しています
15 いいね!
15 いいね!
今週のランキング