【Product Story #3】ユーザー調査とテストを徹底的に繰り返し、反対派も巻き込みローンチに至った「スマートチャンネル」開発プロジェクトの裏側

天気予報や占い・話題のニュース記事など、普段利用しているLINEサービスからユーザーにおすすめの情報が、LINEのトークリスト上部に表示される新機能「スマートチャンネル」。今回はこのスマートチャンネルの企画からリリースまでの開発舞台裏について、プロジェクトメンバーに語り合ってもらいました。

スマートチャンネルの開発プロジェクトでの役割は?

── 今回はスマートチャンネル機能の企画・開発に携わった皆さんにお集まりいただきました。まずは皆さんのご担当と、いつからプロジェクトに関わったのかを教えてください。

渡邉:2018年の4月からスマートチャンネルのTech leadとして参加して、システムの設計や検証から、初期のローンチまで開発を担当していました。今年に入ってからはスマートチャンネルだけではなく、運用型広告「LINE Ads Platform」を開発する部署のマネージャーもやっているので、スマートチャンネルのTech leadは別の人に引き継いで、私自身はプロジェクトがスムーズになるように、特にロールを限定せずなんでもやっています。

朝井:僕はスマートチャンネルのPMで、前任者が出産休暇に入った2018年7月にジョインしました。8月くらいからテストを繰り返しながら今年4月にリリースし、現在に至ります。

菊地:LINE Data Labsの機械学習チームでPMとマネージャーを兼任しています。プロジェクトに関わり始めたのは、2018年の10月です。
スマートチャンネルはいろんなコンテンツが表示され、私のチームでも一部開発してるんですが、私はチーム外の開発組織にレコメンドエンジンを作ってもらうための説明やコミュニケーションの仕事が主でした。

小川:私は渡邉さんのチームに所属しているサーバーサイドエンジニアです。スマートチャンネルでは、コアになるコンテンツの最適化部分のサーバーサイドの開発を担当しています。このプロジェクトに関わり始めたのは。2018年の8月くらいです。

── スマートチャンネルはどういうサービスなんですか?

渡邉:スマートチャンネルは、LINEのトークリストの一番上の部分に表示されていて、何が表示されるのかは、人それぞれに違います。その人がどんな情報を求めているのか、何が一番価値ある情報かを推測して届けるのがコンセプトです。

スマートチャンネルが表示されるエリアはユーザーにとってすごく大事な領域なので、そこに情報を出すことに懸念の声もありました。そこでちゃんとユーザーが興味を持ってくれるような情報を出すサービスを作りましょうと生まれたのが、スマートチャンネルです。

朝井:その人に合ったコンテンツ、喜んでもらえるコンテンツを届けてくれる賢いプラットフォームを目指しています。例えばマンガ好きな人には、LINEマンガの新刊の発売情報を表示したりします。

渡邉:プロジェクトを進めるにあたっても、いきなり開発を始めたわけではなくて、この場所に情報を出すことが受け入れられるのかどうか、どんな情報を出したらユーザーが喜んでくれるのかを議論することからはじめました。
まずはフィジビリティテストとして、別のシステムを使って、ユーザーが情報や表示自体にどう反応するかをテストしました。対象となったユーザーに、表示した情報は役に立ったか、他にどんな情報を出してほしいかなど、アンケートも行っています。人気が高かったのは天気の情報や占い。災害情報を出してほしいという要望もありました。

Tech leadとして開発を率いた渡邉さん

担当者も懐疑的だったスマートチャンネル

── 開発はどのように進んだんですか?

渡邉:2018年4月から4ヶ月の間フィジビリティテストをおこない、ユーザーニーズが明確になってきたところで、開発方針や仕様などが固まりました。そこから2ヶ月ぐらいで開発していきました。開発自体はスムーズだったと思います。
2018年10月にリリースされ、世の中にバーンと出るはずだったんですが、いきなり全ユーザーに提供するのではなく、少しずつ対象ユーザーを増やしてニーズを探っていくことになりました。
レコメンデーションが実際に当たっているどうかは、ユーザーのリアクションを見てみないとわからないので、段階的に10%ずつユーザーに機能を開放していき、最終的に全ユーザーに表示されるようになったのは、2019年3月末です。

菊地:私がプロジェクトに入った時、PMの朝井さんはかなり懐疑的なスタンスで、「このサービス、本当に喜ぶ人いるのかな」とか「これ、絶対にやめさせます」と、結構言っていたのが印象的でした(笑)。

朝井:だって、表示される場所がトークリストの一番上だったから(笑)。レコメンドだけでも厳しいのに、ここに情報を出すなんて何を考えているんだろうと。ギャグかと思うくらいの話だったので、最初は本当に懐疑的だったんです。菊地さんの言う通り、自分が止めてやろうというスタンスで入っていました。
ただ止めるにしても、ちゃんとデータをとらないと止められない。入った当初は開発も進めつつ、フィジビリテストやユーザーへのアンケートも何度もやっていました。

小川:僕もアサインされた時は反対派でした(笑)。最初の頃は、テストで良い結果が出たなんて、そんなはずないと思っていました。たまたま、ちょっと良い結果が出ているだけじゃないかなと。

渡邉:こんな感じで反対も多かったから、説得が大変だったんですよ(笑)。リリースしてからもコンテンツ追加してきたんですが、コンテンツも種類がいっぱいあるんですよ。

朝井:LINEにはマンガや音楽、LINEスタンプなど、いろんなコンテンツがあるので、とりあえずテストしてみようと。テスト段階で20~30個のサービスで一気にテストをしました。数十万のユーザーを無作為に抽出してランダムにサンプリングして、「このコンテンツが表示されたことに対して、どう思いますか?」といったアンケートをとりました。
実は、僕はそのアンケートでネガティブな結果を期待していて、それで止めてやろうと思っていました。ところが、結果を見ると意外にポジティブな声が多かった。ポジティブとネガティブがニュートラルとか、ポジティブな声の方が多いコンテンツもあった。ユーザーの声を聞いたら、データ的にも止めれなくなってしまって、裏目に出ちゃったなと(笑)。 

菊地:テスト段階で、マンガに興味がありそうなユーザーにバナーを出したらすごく数字が悪かったということもありました。一度は「マンガはダメだね」って感じになったのですが、その後どうやったらユーザーが喜んでくれるだろうと考えてターゲティングのロジックや文言など、色々と手直しした結果、かなり数字が改善しました。それは他のサービスでも同様で、自分たちのサービスのユーザーがどういう人たちであるか、何を望んでいるかを考え抜いてやると、反応がすごく良くなるんです。

朝井:スマートチャンネルすでに連携されているコンテンツはいくつもあるんですが、今ではマンガは特に評判が良いですね。うまく改善できた事例だと思います。

菊地:今までも沢山のサービスでレコメンドを作ってきましたが、一つの表示領域に様々なコンテンツを出して、どれが良いか悪いかを横並びで試したことはLINEの中で初めてでした。各サービスからも、公平な基準になっているかどうか、開発と並行してその議論が裏でずっと進んでいました。

朝井:ここまで慎重にユーザーの声をモニタリングしながらリリースしたプロジェクトは、自分が担当したプロジェクトでは他にないですね。
LINEではまずは出してみて、システム的に問題がなければリリースというのが多いんですけど、基本的にポジティブにリリースしてから悪いところを見つけて修正していこうという感じなんです。でもスマートチャンネルは、初期で嫌われたら負けだと思っていました。

当初は反対派だったPMの朝井さん

 最適なコンテンツをレコメンドする仕組み

── 技術的にチャレンジしたことを教えてください。

小川:ユーザーにとって最適なコンテンツは何か。ニュースや天気・占いといった数あるLINEサービスの中で、どれが良いかは人間が選んでも曖昧なところなんです。それを数字やシステムにして、どれが最適か決めるのが大変でした。

渡邉:スマートチャンネルのレコメンドロジックは2層構造になっています。
1層目は各サービス側で作るレコメンドで、そのサービスのユーザー一人一人に対して、レコメンドするコンテンツを提供してもらいます。
それをいろんなサービスから集めてきてきます。いっぱいレコメンドコンテンツが集まるわけですが、その中から一度に表示できるのは一つだけなので、ユーザーにとって最適なコンテンツを一つだけ選んで表示します。
何を選ぶかは機械学習によって決まるので、なんらかのルールがないと決められない。

小川:システムがリアルタイムに取得可能な情報は、まずユーザーが目にとめたかどうかを測るインプレッションがあります。続いてユーザーがとるアクションは「コンテンツをタップして詳細を見る」か「X(バツ)ボタンをタップして閉じる」か「何もしない」の3つ。
この情報をリアルタイムに収集して、どのコンテンツが表示されやすくなるか調節したり、似たような特徴を持った別のユーザーが来たときには、学習した結果の情報を使って、どんどん精度を上げて表示していくようになっています。これが2層目の最適化です。

菊地:「ある時点で表示して、詳細まで見たか、閉じたか」という実績値に基づいて、コンテンツ単位で更に出すか、減らすかを制御するもの。バンディットアルゴリズムと言われるものです。
新しいコンテンツが追加されてすぐの状態だと、バンディットがあるとはいえ、実績値が貯まるのをいくらか待つ必要があります。コンテンツによっては、そもそも出す対象者が少なくて十分に実績値を積めない、みたいなこともある。

小川:この部分は、コンテンツ単位だけでなく、ユーザー単位・サービス単位などの過去実績が加味できる設計になってます。システムをリリースしてからログもたまってきたので、ユーザーごとの過去の反応データから、ユーザーの特徴データを事前に計算しておいて、バンディットアルゴリズムの精度を高めるような工夫もしています。

サーバサイド開発を担当する小川さん

実装や移植コストを抑え、正しく学習させるために

── 他にも工夫したことはありますか?

渡邉:3つほどあって、1つめは、LINEには沢山のコンテンツがあって、一個一個連携するための開発をしているんですが、毎回1から10までやっていくと大変なので、出来るだけ抽象化して、実装部分が少なくなるようにしています。運用フローとかCommon specとかも工夫しています。

朝井:社内の全サービスに向けて説明会をしたんですが、スマートチャンネルはタイや台湾でもサービス提供してるので、大々的に説明会をするために出張したりもしましたね。

渡邉:2つめは学習部分はPythonで書かれていて、オンラインで予測を行う部分はJavaで書かれていることです。

小川:機械学習の部分は、菊地さんのとこのチームが実装していて、Pythonで書かれています。システムの大部分はJavaで書いているので、最初はアルゴリズムの部分だけを実装したPythonのコードをいただいて、その実装を自分達でJavaに書き換えようと思ったんです。でもなかなか大変そうで・・(笑)
Pythonのコードに変更が入るたびにJavaへの移植作業が発生するので、開発スピードにも影響がありそうでしたし。マシンラーニングチームの方とも議論して、Pythonのコードをそのまま活用するために、学習部分をAPIサーバ化してJavaで実装したコンポーネントとつなぎ合わせました。

菊地:実際のところ、こちら側で修正かけたい時に、移植コストかけずそのまま使ってもらえるというのは良いですよね。

小川:一方、ユーザーからのリクエストに対して学習済みのモデルを使ってスコアを推定する部分では、多数のリクエストを安定して処理するために、社内で Web アプリケーションサーバとして使用実績の多い Java を採用しています。

渡邉:3つめは、バンディットの学習時に、データ量が少ないときは一つのノードにデータ集めて学習の収束を早め、処理できない程データが来たら分散学習に切り替わるところです。

菊地:バンディットなので、実際にコンテンツが表示されて、それに対するユーザーの反応の実績値が少なく、不確かなときは、ユーザーへ露出をさせる探索(exploration)が優勢で、実績値が溜まってきて不確かさが小さくなると、今度は開いてくれそうなコンテンツが出やすくなる活用(exploitation)寄りになっていきます。
スマートチャンネルには、大量のリクエストが飛んでくるので、学習においても分散処理が必要になります。ただし、コンテンツ単位で見た場合には、ごく少数のユーザーにしか推薦されないものも存在します。この場合は、ノードを分散させるとなかなか学習が進まないので出来るだけ1つのノードで学習したい。ある種、二律背反な要件が存在します。

小川:ユーザーの反応のログは、基本的には、表示されたコンテンツの種類をキーとして、consistent hashing によって、複数あるノードのうちのどれかに割り当てて処理しています。
キーをコンテンツの種類とすることで、同じ種類のコンテンツのログは同じノードに集まります。学習の効率を考え、できるだけ同じコンテンツの学習は同じノードで行うようにしています。
ただ、ある特定のコンテンツのログが大量に集まった場合には、単一ノードでは処理しきれない可能性があります。そのため、ログが一定以上になった場合には、複数のノードに分散させて学習するように工夫しています。

レコメンドエンジンを担当した機械学習チームの菊地さん

── 国によってユーザーの反応の良し悪しに差があったりするんですか?

渡邉:その国ごとに強いサービスがあるんですけど、例えばタイではドラマなどの動画を配信する「LINE TV」が流行っていて、強いですね。一番カルチャーショックを受けたのは天気のコンテンツってどの国でもウケるだろうと思っていたら、タイでは天気を出したくないって言われたんです。タイは雨季と乾季があるけど、雨季に降るスコールもいきなりきてすぐ終わるし、天気によって服装を変えるみたいな習慣もないみたいで、気にしている人がほとんどいない。国によって状況が全然違うというのが面白いなと思いました。

小川:タイと台湾では、スマートチャンネルをリリースする以前から同じ領域に広告を表示していたという経緯もあって、日本と比べてユーザーの反応がネガティブでした。ここには広告だけではなく便利な情報も表示されるというユーザー認知を、これから時間をかけて獲得していかないといけないフェーズです。

渡邉:国によって文化も状況も違うから、日本を基準にして考えるとぶれてしまいます。そこで、各国でローカルチームを作ってその国に合ったベストな提案をしてもらっていました。

「スマートチャンネル」を今後どうしていきたい?

── 最後に、今後スマートチャンネルで取り組んでいきたいことは?

渡邉:やっぱり1番の目的はユーザーに喜んでもらうことだと思っているので、コンテンツをもっと増やしたいですね。コンテンツが増えれば増えるほど、ニッチなところに刺さるコンテンツが必ずあるので、いろんなバリエーションをとにかくそろえたいです。

小川:機械学習を改善して、よりユーザーひとりひとりにとって有益なコンテンツが表示されるように進化させているんですけど、結局機械学習で選ぶ選択肢の中に、そもそもコンテンツがないと、いくら機械学習を良くしても、喜ばれない状況に陥ってしまいますものね。

菊地:今はABテストが回り始めていて、レコメンドのロジックなども何パターンか試して、どっちがよかったとか、個々のロジックについても、他にどういう情報使うともっと良くなるか、みたいな改善が進み始めています。このアクティビティがしっかり回り始めると良いな、と思ってます。

朝井:トライアンドエラーをやって、改善しながらやっていかないとですよね。他のプロジェクトと比べてこんなに試行錯誤しているプロジェクトもないですね。普通のプロジェクトだとそこまで試行錯誤できない。スマートチャンネルのエンジニアは、みんな失敗大好きでスキルも高いんですよね。スキルが高いからそこに付き合ってくれるし、喜んでいろんなことにトライしてくれようとしてくれる。そこが全然違うと思います。

渡邉:議論になった時に、スマートチャンネルチームは「じゃあ、計測しよう」「まずはABテスト回そう」「実装が無ければ、まず簡単に実装して試してみよう」とか言い出すよね(笑)。とりあえずデータで語ろうというのが浸透している。
僕も小川さんも、もともと広告開発をずっとやっていて、とにかくデータを集めて検証して判断することに慣れているから、あんまり抵抗ないんですよね。

小川:設計の段階からデータをきっちりとるように考えて作っていますね。
あと、今のレコメンドデータってリアルタイムのデータではないというのがあって、タイムリーな情報をもっとタイミングよく出せる、例えば天気が急に悪くなったときにリアルタイムに情報が出せるプラットフォームにしていきたいですね。

朝井:それは是非欲しいです!お願いします。

渡邉:えーと、それにはアレとアレが必要で・・、とにかく、今後も色々やっていくのでご期待ください!

スマートチャンネルの開発に携わる募集ポジションはこちら