Gunosyデータ分析ブログ

Gunosyで働くデータエンジニアが知見を共有するブログです。

新プロダクトの記事配信ロジックを1から作った話(ロジック編)

はじめに

こんにちは。GunosyTechLab MediaMLチームの上村です。早いことに新卒2年目も折り返しで驚いていますが、振り返ってみると多くの技術に触れることができてとても濃い一年半だったなと実感しています。

今回の記事の内容は、「auサービスToday」開発の第2弾、記事ロジック編です。 主にサービス初期に「ログがほとんどない状態で、如何に重要または人気な記事を配信するのか」というテーマで、どのようなロジックで実現を目指したかを紹介していこうと思います。

第一弾の実装編では、システムアーキテクチャや効率的に開発を行うためのTipsを紹介しているので、是非こちらもご覧ください! data.gunosy.io

auサービスTodayについて

auサービスTodayとは、KDDI株式会社と共同で開発を進めているアプリです。 前身は「auサービスTOP」というアプリで、今回リニューアル開発に携わることになりました。

f:id:muemura:20210914140806p:plain
auサービスToday イメージ図

このアプリは、au関連の各種サービスのお知らせやリンクと共にニュース記事を配信するポータルアプリという形で提供されています。詳細については、以下の記事をご参考にしていただけると幸いです。

gunosy.co.jp www.appbank.net

ロジック開発について

普段私達のチームでは、主にプロダクトのニュース記事に関するロジックの開発や分析を担当しています。

data.gunosy.io data.gunosy.io

本プロジェクトでも、同様にニュース記事配信の開発に携わったのですが、普段とは異なる制約や強みがあったのでそれらを背景として紹介していきます。

背景

今回アプリのロジック開発を進める際の前提条件としては以下の3点がありました。

  • 開発期間が短い
    • 開発期間は 2020/12月中旬〜2020/3月中旬 のおよそ3ヶ月間
  • コールドスタート問題への対応が難しい
    • サービス開始前の開発であるためユーザーの行動ログがほとんどない
  • Gunosyが開発している他のニュースアプリの知見や統計情報を利用できる
    • 統合データ基盤 Baikal の 統計情報を利用することができる tech.gunosy.io

ロジックの方針

上記の背景を踏まえて、ロジックの大まかな方針を決定しました。大枠としては、「シンプル」なロジック、「全体最適」での記事配信、「ニュースパスの統計情報を活用」した記事のスコアリング、の3つです。これらの方針について解説していきます。

シンプル

シンプルなロジックといっても手を抜くという意味ではなく、グノシーなどの他プロダクトの既存ロジックを流用することで、短期間で記事の配信が行えるロジックの完成を目指しました。

ただ流用するにも、グノシーの記事配信を支えるロジックにも様々なものがあり、そのそれぞれがauサービスTodayでも効果のあるものとは限りません。 そのため、それらのロジックについて改めて効果検証を行い、機能がサービスに合致するかを確認して適用することが必要になります。 しかし、小さい構成から機能追加のために効果検証を行うことで、その機能に対する比較的純粋な効果を知ることができる、というようなメリットもあると考えています。 もしその際に既存のロジックに不足した視点などを発見して解決することができれば、副次的ではありますが、その他のニュースアプリにもその知見をフィードバックできます。 こうした取り組みで、より質の良いニュースアプリの機能を提供できればと思っています。

全体最適

全体最適とは、全ユーザーに対して同じ記事を提供する形の配信形式のことを指しています。 元々、auサービスTodayの前身であるauサービスTOPでは記事配信が手動の運用でした。 そのため全体最適という形で記事配信を行ったほうが、ユーザーが覚える違和感が少なく、アプリを継続して利用していただけると想定しました。

ニュース記事配信ロジックでは、一日に発生する大量のニュースを全てチェックすることはできないため、個々のユーザーで記事を出し分けるパーソナライズが重要*1になります。 これは、大規模なログからユーザーの興味を持っていそうな記事を分析し、ユーザー毎に異なる記事を提供することで、各ユーザーが満足のいくものを目指す個別最適というものです。しかし、本開発においては、満足なログがなく開発期間も少ない状態としては、コールドスタート問題に対応したパーソナライズロジックを作成することよりも、多くのユーザーがある程度満足のいく記事を全員に提供するという形の全体最適化を目指しました。

そこで、社会的に意義のある重要なニュースや多くの人が興味を持ちそうな記事を優先して届けることで、よりアプリを使うユーザーに沿った記事を提供できるのではないか、との考えのもとロジックを組むことにしました。

ニュースパスの統計情報を活用

auサービスTodayは、同じくKDDIとGunosyが運営するニュースアプリの「ニュースパス」と同様にauのスマートフォン端末にプリインストールされた状態で提供される仕組みになっています。

auサービスTodayは前述の通りポータルアプリで、そのターゲットはおもに「スマートフォンに機種変更してすぐの人」を想定しています。言い換えると「まだスマホを使いこなせていないと感じる人(主に40〜50代のユーザー)」に気持ちよく使っていただけるアプリを目指しています*2。そのため、ニュースパスともユーザー層が似ていると想定して、ニュースパスの統計情報をロジックのスコアリングに反映させることで、ユーザーの興味を引きつける記事の推薦につながることを目指しました。

ロジックと運用方法

我々のチームが担当した範囲では、タブ毎の記事リストや関連記事、プッシュなどがありますが、本記事では記事リストの中でもアプリを開いたときに最初に表示されるTOPタブのロジックや、記事配信を支える運用方法について取り上げます。

サービス初期に考慮したものとして、「記事の並びをどうするか」と「社会的価値の高いニュースをどう提供するか」という2つの視点から紹介していきます。

記事の並びについて

記事の並び方に影響が大きいロジックとしては以下の3つの要素があります。

  • 記事CTR
  • 記事の扇情度合い
  • 記事作成時間

解説すると、基本的には記事CTRが高い順にスコアリングを行い、並び替えます。ここで、統合データ基盤 Baikal の統計情報を用いることにより、ログが少ないサービス初期でもより安定した推薦を行うことができました。また、グノシーでも導入している扇情的な記事の判定を行い、排除することでできるだけ健全な記事の提供を目指しています。さらに、時間とともに記事の価値は低下することが想定されるため、記事が作成されてからの時間でスコアが減衰されるロジックを導入しました。

扇情的な記事についての取り組みについてはこちら data.gunosy.io

社会的価値の高いニュースの提供について

記事の並び順以外にも、上記のポータルアプリとして如何に社会的価値の高いニュースを届けるかといった課題がありました。これについては、以下の2つの要素で解決を目指しました。

  • 世間的な関心事のニュース記事を手動運用
  • ストレートニュースを増やす

手動運用というのは、現在のグノシーやニュースパスでも行われている人手で社会的価値の高い重要なニュースを記事の並びに差し込むといった運用方式です。これをauサービスTodayにも取り込むことで、アプリを開いたときにまず今話題の重要なニュースを目にすることができるようになります。しかし、この運用方式だけでは記事CTR順に並び替えるとどうしてもエンタメ系ニュースが多く記事の並びに出てしまうことがあり、前身アプリから継続して利用していただいているユーザーには悪印象となってしまうこともありました。そのため社会的なストレートニュースを多く提供できるように、同一トピックについて述べている媒体数から判定する重要性の考慮や、エンタメカテゴリの記事のスコアを重みをかけて抑制するなどの調整を行い、多くの人が安心して記事を見ることができるような健全な記事リストの提供を目指しました。

おわりに

本記事では「auサービスToday」の開発において、MediaMLチームが開発した記事を提供するロジックについて紹介しました。1からロジックを考えるという非常に良い機会だったなと感じました。中でも限られた期間で、今まで触ってこなかった技術や自分が生み出してしまったバグなどと戦いながら開発ができて、非常に良い経験になりました。(笑)

現在はパーソナライズロジックの開発中ですので、また次の機会にこちらも紹介できればなと思っています。

弊社ではこれからも「auサービスToday」の開発・改善を進めて参りますので、皆様どうぞよろしくお願いいたします。