CodeZine(コードジン)

特集ページ一覧

共通のスキルセットを持つことがエンジニアとデータサイエンティスト協業の鍵――ヤフーのビッグデータ活用【デブサミ2018 夏】

【B-3】 加速するビッグデータ社会〜Yahoo! JAPANにおけるデータ利活用の事例とエンジニアの歩み〜

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2018/08/23 14:00

 近年、ビッグデータの利活用がさまざまな企業で進んでいるが、何より重要なのはデータを分析・解析するだけでなく、実際のプロダクトや事業に活用することだ。一般にビッグデータの利活用というとデータサイエンティストなどアナリストが注目されがちだが、エンジニアもまた重要な鍵を握るのは間違いない。そこで本セッションでは、ヤフー株式会社 プラットフォーム統括本部 メディア開発本部 田地 将也氏が、ヤフーのデータ利活用の事例を紹介しながら、バックエンドエンジニアとして開発に携わってきた立場から、エンジニアのデータとの付き合い方について提言を行った。

ヤフー株式会社 プラットフォーム統括本部 メディア開発本部 アジャイルひよこクラブ 田地将也氏
ヤフー株式会社 プラットフォーム統括本部 メディア開発本部 田地将也氏

エンジニアのデータとの付き合い方とは?

 ビッグデータは、これまで事業の中のほんの一部に活用されてきた。しかし近年では、事業全体にデータドリブンな考え方が浸透し、エンジニアにも「データとの付き合い方」が求められるようになってきたという。

 セッションに登壇したヤフー株式会社の田地将也氏は、「Yahoo! JAPAN」アプリ(Y!の赤いマークがついているもの)のPUSH開発チームのリーダーとして、チームをまとめつつ、自らもコードを書くエンジニアである。活動としてはYahoo! JAPANトップページのバックエンドやユーザーの未来行動を提案するアプリ「Yahoo! Sonomy」の開発に携わってきた。

 入社直後の2012年頃は、Yahoo! JAPANのPCトップページの開発に関わっており、試験的に「主なサービス」の一覧にレコメンド機能を適用したのが田地氏のデータサイエンスとの出会いだという。当時はすべてにレコメンド機能を提供していたわけではなく、ABテストのようなやり方で提供されるようになっており、サイエンスチームが専用のレコメンドエンジン&APIを提供していた。

 トップページからAPIを叩くと、APIからはサービス名とスコアの一覧が返される。そのリストをソートして、上位3つまでにレコメンドを適用するといったものだった。当時の開発について田地氏は「サービス側としては特にレコメンドの中身を意識することなくAPIを叩くだけで利用できた。その分、レコメンドの中身がどんなことをやっているのかまったく理解していなかった」と振り返る。

用意されたレコメンドエンジン&APIで開発。中身を意識していなかった
用意されたレコメンドエンジン&APIで開発。中身を意識していなかった

 その後、トップページにもっとデータの利活用を求める機運が社内に生まれ、さまざまな取り組みが実施された。その中でも、「Yahoo! JAPANトップページのスマートデバイス版」「Yahoo! Sonomy」の2つの事例について紹介された。

「Yahoo! JAPANトップページのスマートデバイス版」「Yahoo! Sonomy」のデータ活用事例

 まず2013~2014年頃に開発された「Yahoo! JAPANトップページのスマートデバイス版」では、パーソナライズの力を使って、グリッド表示やタイムライン表示の最適化を目指したという。当時は人もおらずすべて自分で「気合で作る」状況で、SNSのバズり具合と時間減衰を考慮したフルスクラッチの関数で実現していた。

 「当時は無理に対数関数などを組み合わせてなんとか作っていたが、サイエンスの専門知識が無い中での開発であったためつらかった。パーソナライズについても『パラメータとして時間減衰のようなものが必要』といった、勘所は少しわかったように思う。一方で、気合ドリブンのロジックで作り続けるのは難しく、バグもあり、プロダクトオーナーの要望に十分に応えられなかったのが残念」と田地氏は語り、「改めて専門家の力を借りたいと感じた」という。

 そして次に担当したのがアプリ「Yahoo! Sonomy」のバックエンド開発だ。位置情報に興味関心をかけ合わせたパーソナライズに取り組んだという。まずトップページのサイエンスチームが開発するパーソナライズエンジンに手を入れて「Sonomy用のAPI」を開発。パーソナライズの仕組みの根幹となる機械学習モデルの生成は、トップページのサイエンスチームが基本形を作っていたが、トップページのニュースレコメンド用だったため、一部Sonomy用にプラグインを開発した。そして、記事のカテゴリ分類などは一部フルスクラッチで自前のモデルを開発している。なお、これらの開発は2014~2015年頃。田地氏はこの時に初めて機械学習に触れ、その後の基礎になったという。

Sonomyにおける機械学習の開発
Sonomyでは専用のAPIを開発した

 そして、同時期に「Yahoo! JAPAN」アプリのタイムラインにレコメンドエンジンを採用した。こちらはユーザーの興味関心を使ったパーソナライズが目的であり、当初は検索ワードや閲覧したページのワードベクトルを利用し、回帰で学習させてスコアリングしていく形をとった。

 この時に田地氏は機械学習の初歩を理解し、実際に開発する経験を踏めたことがありがたいと語る。さらにデータサイエンティストが何を言っているのか、どんなことを気にするのかなどが、だんだんわかってきたという。

 「機械学習で効果を出すのにすごく時間がかかる。大量のログデータを学習器に入れて学習させると『モデル』ができてくる。大きなチューニングをせずとも70~80%の分類性能を出すことはできたが、その後チューニングをして分類性能を上げていくことが本当に難しいと実感した。何が邪魔をしているのかを考えながらデータのクレンジングを行ったり、学習に必要なデータとしてどのようなものが必要なのかを推測したり、そうしたことが必要であるとバックエンドエンジニアなりにわかってきた」

 さらに、2012~2015年の間だけでもデータの利活用は急激な速さで進化し、必要性に対する実感もわいてきたという。そして、実際の共同開発を通じて機械学習や自然言語処理の初歩を体験できたことで、データ利活用の勘所が少しずつわかってくると、今度は自分が学んだことを他の機能にも適用したくなってきたという。

PUSH通知にレコメンド、タイミング、現在地をプラス

 それで次に飛び込んだのが、「Yahoo! JAPAN」アプリのPUSH通知機能だった。PUSH通知はユーザーに気づきを与えることが主目的であるために、よりユーザーとの親和性が不可欠となる。

PUSH通知機能はユーザーとの親和性が重要
PUSH通知機能ではユーザーとの親和性を高めるためにデータを活用する

 まずユーザーに合わせた「レコメンド」機能では、サッカーが好きな人に「ワールドカップで日本が勝利した」といったニュースを配信するように、該当コンテンツに興味がありそうなユーザーに通知する仕組みにした。これはHadoop上でユーザーリストを生成し、対象ユーザーに対してPUSHを通知する。単語ベクトルのデータを用いたターゲティング素性を生成するというわけだ。

 そして、通知のタイミングを最適化する機能の追加である。これもHadoop上で、歩いているか、立ち止まったか、Wi-Fiにつながったかなどのデータを分析して、行動解析モデルを生成し適用することが試みられているという。

 3つ目の取り組みは、現在地で発生した災害情報をPUSHする機能の追加だ。これまでのYahoo! JAPANの災害通知は、ユーザーが任意で設定した地域情報に応じて配信されてきた。その設定を、いざ災害が起きたからといって変える人はいないだろう。しかし出先で災害が起きた場合、その場の情報が必要になることは明らかだ。こちらも大量の行動ログを効率的にさばくためにStream処理を利用しているという。

バックエンドエンジニアとデータサイエンティスト、協業のコツとは?

 それでは、こうした「Yahoo! JAPAN」アプリのPUSH通知のデータ活用はどのようにして行われたのか。まずチームとしては、バックエンドエンジニアとデータサイエンティストが協業する体制を整えることが重要だ。バックエンドエンジニアが所属するチームにデータサイエンティストが入ったり、他のチームにいる場合もそこから強力なサポートを受けたり、協力体制ができていたという。また、バックエンドエンジニアは通知の配信系を開発し、データサイエンティストが学習器・分類器を開発するなど程よい役割分担ができていた。

 「あくまでプロダクトをユーザーに届けるという目的は共通。その前提のもと、必要な知識をお互い共有・理解しながら開発に関われたことが肝要だったように思う。例えば、機械学習を熟知するサイエンティストは一方でWebアプリにどう当てはめればいいのかわからず、Pythonしか書けないケースが多い。そこでエンジニア側がPythonを覚えてサイエンティストが考案する機械学習ロジックをHadoop上で動作する分散処理に組み込むことを行ったこともある」

 こうしたエンジニアとデータサイエンティストの協業を実現するために、エンジニアである田地氏が頑張ったこととして挙げるのは、「Python」を書けるようになったことと、学習器・分類器それぞれの提供フローを理解することの2つ。決して難易度は高くないと話す。

 これらの経験を経て学んだことは、バックエンドエンジニアとデータサイエンティストとの「協業」が意味を成すということだ。ただし協業には「同じ言葉で話せること」が大切であり、そのために歩み寄ることが重要だという。

 それではどのように歩み寄ればいいのか。田地氏は「共通のスキルセットがあれば、共通言語で物事を語れる。徹底する必要はない。『相手が何を言っているのか』『自分は何を伝えればいいか』理解し合うことが重要」と語る。

エンジニアとデータサイエンティストの協業には、共通のスキルセットを持つことが欠かせない
エンジニアとデータサイエンティストの協業には、共通のスキルセットを持つことが欠かせない

 そして、エンジニア側が簡単にできそうなこととして、初級者向けに

  1. とりあえずPythonを書いてみる
  2. 学習・分類器を実際に書いてみる
  3. ロジスティック回帰という単語を覚える

 の3つを挙げた。また、中級者向けとして、サイエンティストが考えた機械学習ロジックを実際のアプリケーションに組み込んでみることを提案した。ただし、例えば機械学習ロジックの開発部分はサイエンティストに任せて、生成したモデルをAmazon S3に配置してもらうなど、「役割分担はある程度やっていいはず」と語った。

 そして最後に田地氏は「ビッグデータの利活用は急激な速度で広まっており、その使い方はアイデア次第で広がる。書籍や論文も出ているのでぜひ読んでみてほしい。一般的なバックエンドエンジニアも興味を持って、まずはサイエンスに触れてみることがおすすめ。その第一歩としてぜひPythonに挑戦してほしい」と語り、セッションのまとめとした。

お問い合わせ

 Yahoo! JAPAN

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • CodeZine編集部(コードジンヘンシュウブ)

    CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5