ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog

テクノロジー

プッシュ通知のタイミングを制御する話 〜 ユーザーの空気を読む通知

トップ画像

Yahoo! JAPAN研究所 坪内と申します。今日は通知の話です。
プッシュ通知に気づかなかったり、タイミングが悪くてイラっとしてしまうことはないでしょうか? 最適なタイミングで通知する研究結果をご紹介します。

みなさんが目にする、ヤフーの広告の表示や、オススメの情報は、パーソナライズされています。つまり、過去のユーザーの行動履歴から「この人は釣りが趣味の人だ」と推測し、釣りに関するニュースや、釣竿のレコメンデーションをしています。これはプッシュ通知もしかりです。プッシュ通知は表示できる文字数や送信できる通知数に制限があります。ユーザーの興味などから、この人にはこの通知だ! というのを送ります。ここまでは、広告やレコメンデーションなどと同じです。しかし、通知にはもう一つ最適化できる要素があります。それが「タイミング」です。

例えば、あるユーザーのヤフーのログを徹底的に解析して、ユーザーが高級釣竿を探しているとわかります。そして、満を持して通知を送りつけるわけですが...。

エアー通知とKY通知
(図1:エアー通知とKY通知)

  • 「エアー通知」
    スマホが机に置かれていたり、カバンやポケットの中に入っていて、ユーザーに気づかれずにそっと寂しく震えるだけ。
  • 「KY通知」
    ユーザーが一生懸命スマホで集中しているものを妨げて、逆に「邪魔だ」と思われてしまう。(例えばシューティングゲームの時にブルってくると、集中力が切れてイライラします)

など、ご自身の経験と結びつけてみますと、通知には「内容の最適化」の他に、もう一つ「タイミングの最適化」も重要になってくることが想像に易いかと思います。

そこで、本研究で取り組んだことが、「通知のタイミング最適化」です。研究を行い、国際会議では以下の2本を発表いたしました。1本目が通知のタイミングを制御するという発想自身の有効性の検証、2本目はシステムの実装および提案です。(Tech Blogだけで細かい仕様などをすべて提供するには限界があると思います。興味ある方は、ぜひ論文をご覧いただければ幸いです。)

どうやって通知のタイミングを制御するか?

ここからは、通知のタイミングを最適化する基本的なアーキテクチャーの説明をします。

この研究をはじめるにあたり、「そもそも通知のタイミングを変える仕組みってどうすればいいの?」というところから調査し、考えました。いろいろな代替案や経緯などは省いて、結論から言って図2のような仕組みで「タイミング制御通知」を実現しようとなりました!

通常の通知と、タイミング制御通知の仕組み
(図2:通常の通知と、タイミング制御通知の仕組み)

通常の通知は、スマホに通知の信号が届いた瞬間、そのままプッシュ(発火)されます。例えばYahoo!ニュースから号外の記事が届くと、発火のモジュールが呼び出され、発火するという仕組みですね。

今回のタイミング制御通知では、すぐに発火モジュールを呼び出さず、アプリの中にいったん記事を蓄積します。通知の記事がスマホに届くと、アプリによってスマホの多くのセンサーが全てonになり、スマートフォンの状態変化を観察します。要はスマホがセンサーや操作ログなど得られる情報を処理して、「今か? 今か?」というのを待つのです。この時に後述する「今でしょ!スコア」を計算し続けます。「今でしょ!スコア」がある閾値を超えた瞬間、「今でしょ!」と判断し、初めて発火モジュールを呼び出すという仕組みです。

機械学習で「今でしょ!スコア」の計算

この仕組みで肝となるのが「今でしょ!スコア」の計算です。今でしょ!スコアは機械学習によって学習された判別モデルによって計算されます。図3は、このタイミング制御通知のシステム概要です。

システム全体図
(図3:システム全体図)

「今でしょ!スコア」は過去の失敗/成功の過去ログと、その時のスマホの状態とを突合させ、スマホがどのような状態の時に通知が開かれやすいか? というのを学習します。以下の表1はスマホの状態を判別するために用いている特徴量です。

「今でしょ!スコア」の計算に用いている特徴量一覧
(表1:「今でしょ!スコア」の計算に用いている特徴量一覧)

表1の特徴量に従いまして、例えば、

  • 「8時の時に、運動状態が歩く→立ち止まるになり、充電はされておらず、ボリュームは2、サイレントモードではなく、ネットワークがLTEだった」時に送った通知は「開封されなかった」
  • 「9時の時に、運動状態が歩いていて、充電はされていなく、ボリュームが2から3に変化し、サイレントモードではなく、ネットワークがWi-Fiだった」時に送った通知は「開封された」

...みたいなログがウン百万レコード、ユーザーから集まります。(個人は特定できない形になっています)
このログをもとに、では、どういう状態なら通知は開かれやすく、逆にどういう状態なら開かれにくいか、というのを学習します。その結果、「今でしょ!判別モデル」が作られます。例えば「運動状態が歩く→立ち止まった時はスコアを1減らして、ボリュームを2から4に上げた時は2点足してください」みたいなモデルです。そのモデルで、「今でしょ!スコア」を計算するという仕組みです!

「今でしょ!判別モデル」はいつも同じモデルでいいか?

上記の仕組みで、気になるのがこの「今でしょ!判別モデル」です。論文1本目の基本的な仕組みでは、誰がどんな時にでも同じモデルで判別します。例えばですが、通勤通学中で電車に乗っている時も、友人とカラオケを楽しんでいる時も、ランニングで走っている時も、統一モデルが「運動状態が歩く→止まるになったら、通知が開かれやすくなるから今でしょスコアを大きくしてください。」というモデルです。

ここに課題があると考えました。

上記の例で、歩いている状態から立ち止まると、注意がスマホに注がれる可能性が高くなり、通知が開かれやすくなる、という仕組みを学習した結果だとします。通勤通学中は例えば、歩行用信号を待っている時に、立ち止まり、スマホに注意が注がれるかもしれません。しかし友達とカラオケボックスの例では、カラオケの途中にトイレまで歩いて、また部屋に戻って、さあ歌うぞ! というシーンかもしれません。そうなると、逆に「歩行→立ち止まる」のタイミングで通知を送ってもむなしくぶるっとなるだけです。ランニングの例では、走っていて、疲れたので歩き、さらに疲れたので止まった瞬間かも。それならば、まだこれから、再度頑張って走り続けるという瞬間に通知は不要です。

そのため、ユーザーが置かれている「コンテキスト(状況)」によって、上記の判別モデルを個別に学習しよう! というのが2本目の大きなアイデアです。「ランニング中だ」「通勤通学だ」「走っている」...などのコンテキストを網羅するのは難しいです。なので、以下の「平日/祝日」「大まかな時間」「バイブレーションの状態」「スリープ状態」この4つの組み合わせで、64通り(4×4×2×2)のコンテキストを表現しました。そして、異なるコンテキストでは、異なるモデルが学習される仕組みを構築しました!

※マニアックなことを申しますと、それだけでトップカンファレンスに通ることはなく、コンテキストが細分化され、データが少ない時にいかに似たコンテキストの日のログで補えるか、というのもアルゴリズムのポイントになっています。そのあたりは論文をご覧ください。

考慮したコンテキスト一覧
(表2:考慮したコンテキスト一覧)

いずれにせよ、これによって、ユーザーが置かれている状況が異なれば、異なったデータで学習された異なる「今でしょ!判別モデル」が適用され、スコアが計算される、という進化を果たしました! これが論文その2のポイントです。

タイミング制御通知の効果はいかに?

さて、2種類(基本型、コンテキスト判別型)の2つの「今でしょ!判別モデル」で提供された通知、結果はどうだったのでしょうか? 実験を行いました。約40万人のAndroid端末のユーザーをランダムに以下の2つのグループに分けます。

  • グループ1:これまでの通知(届いたらすぐに発火)
  • グループ2:タイミング制御が発動!

グループ1の開封率を1とした時に、グループ2の開封率がどの程度だったかのgainを示したのが、以下の結果(図4)です。

結果1(開封率)
(図4:結果1 開封率)

グループ1とグループ2には基本的に同じ通知を送っています。もし、gainが1.0だったということは、グループ1もグループ2も同じ開封率だったということです。1.0よりも高ければそれだけ通知の開封率は改善された、逆1.0よりも小さかったら悪くなってしまったということを示します。実験期間の前半20日まで(緑色)が基本型のタイミング制御通知、そして、20日目以降(青色)がコンテキスト判別型の通知のgainを示します。

図4を見ますと、2つのことがわかります。1つ目は、どの日もgainが1を下回っていることがないということです。つまり、タイミング制御通知の方が、ユーザーの開封率が高まっていることを示しています。2つ目は、前半よりも後半の方が開封率のgainが大きいことです。 前半と後半は、コンテキストを考慮するかしないかの違いですので、コンテキストを考慮することがさらに効果を発揮していることが読み取れます。統計的に見ても効果があることは明らかです。通常の通知に対する開封率のgainも1.4倍になっているということですので、まさに効果覿面ですね!

もう一つ面白い結果です。通知を発火させてから120秒間の間に通知を開封した人の数の増え方です。実線がタイミング制御通知(コンテキスト考慮モデル)、点線が通常の通知です。

120秒間のユーザーの反応
(図5:120秒間のユーザーの反応)

上記の図5からは通常の通知(点線)は、発火してから、時間とともに徐々に開封するユーザーが増え続けていることがわかります。一方のタイミング制御通知は、もう最初の発火時点ですぐに見られていることが確認できます。つまり、ユーザーがうまく注意を注いでいるその瞬間に通知が発火され、開封されていることがわかります。この辺りが先ほど示した開封率のgainに寄与しているのだと推測されます。

これまで、言語処理や興味分析などの技術を駆使し、ユーザーの興味を推定することにこだわってきました。もちろん、それも大切な技術です。ですが、通知の場合にはさらに「タイミング」を最適化することもとても有効な手段であるということがわかりました。通知のタイミングを変えるだけで、より多くのユーザーに通知が開封される。この仕組み、いかがでしたか?

余談:この仕組みのデメリットはないのか?

最後に、余談ですが、この仕組み、素晴らしいもののように思えるかもしれません。デメリットはないか、考えてみましょう。次に読み進める前に、皆さんもせっかくですので考えてみてください!

社内でセミナーを行った時に会えてこのタイミング制御通知のデメリットを社員の方に考えてもらったことがあります。

  • 電池消費が多くなる
  • なんか自分を見られているようで気持ち悪い

などの意見が多く目立ちました。電池消費については、おっしゃる通り、通知が届いた後、スマホの中で「今でしょ!スコア」を出し続け、計算します。計算量が増えることにより電池消費も多くなります。しかし、確認したところ電池消費の差分は確かに増えるものの小さく、使っていて「ああ、最近電池が減るようになったな」と感じるほどではないことを確認しました。

自分を見られているようで気持ち悪いという課題もわかります。これは、こういったパーソナライズの解析にはつきまとう課題でして、いかにユーザーにしっかりと説明して分かってもらうかが重要です。今回のケースですと、個人のモデルを作っているわけではなく、かつユーザーによってモデルの差はない。解析時にはユーザーごとにデータを切り分けるなどの解析は一切含まない、などの観点からプライバシーの問題は低いという認識でした。

では、本当にデメリットは何もない? 実は、1点確認できているデメリットが「タイミング制御通知が強すぎる」ゆえのデメリットです。

速報通知の開封率
(図6:速報通知の開封率)

上記の図ですが、breaking news(いわゆる速報)通知の開封率です。有名な方が亡くなられたり、プロ野球の優勝チームが決まったり、あるいは大きな政策が決定されるなどすると、速報が届きます。ヤフーのアプリでも、速報通知サービスを行っています。速報は、即時性が重要であることから、タイミング制御通知グループに対しても、「届いたらすぐに発火」の通知で行いました。タイミング制御をしなかったということです。

つまり、通常グループも、タイミング制御通知グループも、速報については同じはずなのですが...。実験期間の30日で速報通知のgainが1.0より下回っています! つまり、速報がスマホに届いていても、ユーザーがスマホに気づくタイミングで、ためていたいつもの通知(タイミング制御版)が届いてしまうので、速報が見られなくなるという事態です! 複数の通知タイプを同じ1つのスマホ上でどのように共存させるか...(例えば、速報の時にはしばらくタイミング制御通知機能をオフにするなど)といった工夫が必要です。

おわりに

いかがでしたでしょうか? プッシュ通知について、通知のタイミングに着目したことが面白い! と思っていただければ幸いです。これまでのレコメンデーションなどの分野で"鮮度"という概念はありました。その鮮度を考える時間感覚が極端に短い世界にも機械学習の勝負所があるということです。ぜひ、この分野掘り下げていきたいと考えています。
ここまでご覧いただき、ありがとうございました!

写真:アフロ

こちらの記事のご感想を聞かせください。

  • 学びがある
  • わかりやすい
  • 新しい視点

ご感想ありがとうございました


坪内 孝太
Yahoo! JAPAN研究所
人の行動ログに着目したデータ解析の研究に従事しています。

このページの先頭へ