目次
「【U-NEXT ☓ Oisix 】データ分析と機械学習 事例発表」に参加してきたので、そのレポートです。
会場
五反田にあるOisixのオフィスで行われました。ここは駅に近く、アクセス良好でした。
オフィス内は綺麗で、ところどころにOisixらしさ、農産物のイラストがありました。
懇親会で出していただいた、トマトとブドウはとてもおいしかったです。これはOisixで買えるやつなのだろうか…!
Oisix事例:顧客属性推定とレコメンド
自己紹介
喋っていた方は、がっつりエンジニアだったというわけではなく、個人的にシステムトレードに興味があり、そこからOisixへ入社してデータ分析を始めたそうです。
現在は、パーソナライズやレコメンドを進めているそうです。
パーソナライズプロジェクト
Oisixとしては、お客様1人1人によりそったサービスや商品を提供したいので、様々な状況を理解して提案していくようなシステムにしたいと話していました。
Oisixでは定期ボックスという週に1度の頻度で定期的に購入できるものがあり、この中にデフォルトで商品が入っている状態になっています。定められた期日までは商品が変更でき、欲しいもの不要なものを入れ替えられます。
この定期ボックスにデフォルトでいれる商品が、ほとんどの人が同じモノになっていたので、パーソナライズして1人1人違うものを提案していく、というのが具体的なもののようです。
レコメンドのやり方
レコメンドは「顧客のクラスタ分析」と「商品のバスケット分析」の二段階で行っているそうです。単にバスケット分析をしただけでは、似たような商品を提示するに止まってしまいます。顧客のクラスタ分析をしてからバスケット分析をすることで、より精度を上げるようにしていました。
クラスタ分析としてクラスタリングとクラス分類があります。クラスタリングは教師なし学習で、全体をなんとなく眺めてざっくり囲むようなアルゴリズムが主なものです。クラス分類は教師あり学習で、例えば子供がいるかいないかを予測するものになります。
今回はクラス分類を利用して、子供のありなし、料理のするしないを分類し、2x2の4パターンに分けたそうです。 社内にもともとある知見や仮説が、この特徴だったので選択したそうです。
バスケット分析は「リフト値」と呼ばれるものを計算して高い順に出すものです。リフト値は信頼度と呼ばれる値と、支持度と呼ばれる値から算出されます。具体的には「ポテトフライを買った人はクラッカーを買っている傾向がある」といったものになります。
レコメンドのための基盤
OisixではメインDBとしてオラクルが使われているそうです。ここには顧客や商品のデータ、受注に関するデータが入っています。また、MySQLも合わせて利用されており、こちらには購買履歴や売り場に反映するための商品データが入っています。
データ分析用としては、トレジャーデータを利用しており、データの集約や加工をこちらで行っているようでした。
具体的なレコメンドへの流れ
データ整備
何をするにもまずはデータを整備する必要があります。
Oisixではトレジャーデータに集めて、そのデータを基に分析をしていました。 ここでの失敗談として、DBデータが更新されていなかったり、意味のないものが登録されていたりなどしたこともあり、手戻りが発生したそうです。
きちんと分析できるための準備も大事ですね。
アンケートの収集
ユーザのクラスタ分析に向けて、ユーザーアンケートによって教師データを集めたそうです。例えば「食の好みは」「料理をしますか」などを聞くことで、
ただ、アンケートの内容を詰め切れていなかった部分もあり解答と実態に差が出てしまうこともあったようです。自社サービスの特徴も考えてアンケートを作ろう、ということを言っていました。
外れ値データの除外
分類することが難しいので、「ほぼ買われている」「まったく買われていない」というものを除外したそうです。 具体的には購買数量をk-meansにかけて分けていったと話していました。
分類モデル
Y=セグメントに属するか、X=過去6ヵ月の商品ごとの購買数、1200人のデータセットとして、ロジスティック回帰によって、モデルを作ったそうです。 しかし、学習するたびに異なる結果になってしまったそうです。原因としては、説明変数が多すぎたと話しています。一般的には説明変数の5倍にあたる データセットを準備すると良いです。
今回はデータセットの準備も出来ないため、似たような商品をまとめたり、削ったりなどすることで、説明変数の数を減らしていき、モデルが動くようにしていました。
分類モデルの適応
出来たモデルを顧客全体にあてて前述の4種類に分類したそうです。具体的には二回に分けて実施して、子供のありなし→料理のするしない といったようです。 テクニカルな話ですが、標準化の手法がやや間違っており、平均→標準偏差の重み設定を再適用してしまった、と話していました。
バスケット分析
顧客の分類が出来たので、それぞれに対してバスケット分析をしていきます。 実例の紹介もあり、例えば「シャルドネ→ソービニョンブラン」といった具合に見せていただきました。
やはり問題もあり、似たようなカテゴリが出てしまったり、毎週1人1人に様々な商品を提案することが困難だということがわかったそうです。 機械学習が万能ではない、ということを認識する機会になったと話していました。
商品の提示
実験的にできた結果ですが、実際にそのレコメンド効果を試すために、サイトの様々なところに出してABテストをしていったそうです。 同じロジックで出しても売り上げが変わり、売り場ごとに特徴の違いというのがあったようです。
今後について
顧客属性と商品属性をかけ合わせたり、地域や季節といった要因を組み合わせたり、もっともっと試したいことや、応用した別機能を考えていきたいと話していました。
U-NEXT事例:レコメンドシステムのこれまでとこれから
自己紹介
研究開発として、二人で進めており、どちらもエンジニアではないが理系出身ということでやっていたそうです。
U-NEXTのレコメンドシステム
U-NEXTは動画、電子書籍の配信サービスです。 12万本の映像、20万冊の電子書籍と多くのものがあり、とても端から端までは見切れません。 そこで、キュレーションをする仕組みを作りましたが、それも多くなってきてしまったので、リニューアルに合わせてレコメンドシステムを乗せて、より満足度を上げようという試みのようです。
レコメンドの要件としては、1人1人に違うものを、一日一回の更新で、でもパフォーマンスは損なわず、そして準備期間も短く…、となかなか険しいものだったそうです。
レコメンドシステムとしてやったこと
まずはデータを放り込む場所、ロジックを用意し、Oisixと同じくトレジャーデータに入れていったそうです。 そして分析やシステム構築というフェーズに入るのですが、社外と提携して進めるという話もありつつも、社内で小さく初めてトライアンドエラーでぐるぐる回していこうとしていました。 その裏ではレコメンドの評価を正しくできるように、目標が達成しているか見えるように判断できる仕組み作りも行ったそうです。
結果としては、視聴時間が27.5%アップし、「気持ちの良いレコメンドをしてくれる」といった評価も得られているそうです。
レコメンドの実践における課題
作ったことのある人がいない、作り方がわからない
「推薦システムのアルゴリズム」を読み、社内で勉強して、試行錯誤していった。トレジャーデータを利用することで、小さく始めるということも叶ったと話しています。
レコメンドの方法
レコメンドの方法としては大きく、協調フィルタリングか内容ベースの分析があります。 U-NEXTではよりよいレコメンドを求めてどちらも試していったそうです。
協調フィルタリングとしては、 評点の予測がよくありますが、U-NEXTには評点データがあまりなく、主に暗黙的データと呼ばれるログ、 つまり「動画再生ログ」「購入ログ」「クリック・遷移ログ」といったものをうまく利用することで、協調フィルタリングを実現していました。
協調フィルタリングにはユーザベースとアイテムべースがありますが、 ユーザベースは登録時の属性を利用するなどしたものの、新規ユーザーや視聴数の少ないユーザにはうまく働かず、難しいとの見方でした。 一方アイテムベースでは、再生ログを基に分析をし、結果として視聴時間がアップして成功と話していました。
内容ベースは、内部的に持っているタグカテゴリの分類や、そのベクトル化、そしてクラスタリングといったものを組み合わせて進めたようです。 具体的には、ApacheSparkとkuromoji.js、t-SNE、Scala、自作の可視化ツールを利用して、実施→正しさの人力検証をしていたとのことです。 しかし、協調フィルタリングに比べると、あまり良い結果にはならなかったそうです。 ただコールドスタート問題の解決(分析をするまで時間がかかる)や、セレンディビティの演出(出くわした!というもの)といった部分に一定の効果が見られるとのことで、 今後も進めていきたいと話しています。
また、レコメンドはエンジニアだけのものではなく、マーケティングやプロモーション担当の人もいじりたいとのことで、 GUIアプリケーションを提供して、設定変更やレコメンド適用についてをやりやすくしているとのことです。
他社との連携
atilikaという会社と協力して進めており、機械学習に関する流れの加速や、atilikaの持っている知見や発想、技術を利用していくという話です。 最先端のアルゴリズムや技術の適用など、自社だけで追いつけない部分をお願いしたり、データ分析という部分についてコンサルティングしてもらっているそうです。
まとめ
参加表明が100人を超えていたり、質疑応答やその後の懇親会も活発な発言があったり、様々な業界の様々な人がこの分野に関心があるということを実感しました。
個人的にも、機械学習を少しやってみている段階で、これでいいのかどうか、どうやって進めていこうか、といった部分を悩んでいるところだったので、 こういった事例を聞けることで不安解消につながって、非常に良い会だったと思います。
すごいシステム、完璧そうなシステムといったもの用意しないと、運用できないのではと思っていた節もあったのですが、 実際に事例を聞いてみると、ぼくの学習している範囲でも実現できそうなことばかりで、このくらいでもいいのねーと思いました。
すごいシステムを目指すというのも大事だと思いますが、ひとまずは今の自分のレベルくらいで、いろいろと活用していきたいと思います。