こんにちは、ZOZO NEXTでウェブエンジニアを担当している木下です。先日、弊社が運営するオウンドメディアのFashion Tech Newsにおいて、記事リストのパーソナライズを行いました。本記事ではパーソナライズ導入における、要件定義、レコメンドエンジンの比較、実装での知見や注意点についてまとめます。
背景
「Fashion Tech News」とは、2018年に運用を開始したZOZO NEXTのオウンドメディアです。ファッションテック領域へ挑戦を続けるZOZO NEXTが、独自の視点でファッション×テクノロジーのニュースを提供しています。
記事本数の増加や継続的なサイトの改善などを進めていましたが、以下の課題がありました。
- 直帰率が高い
- 単独の記事を目当てにした新規ユーザーが多い
そのためPV数の増加には、回遊率を増やしたり、再訪問率を上げたりすることが必要でした。
解決方法の検討
上記の解決方法として、記事下部にある関連記事のパーソナライズを検討しました。
課題の分析
ユーザーの行動を分析した結果、利用するユーザーの大半は新規ユーザーであり、検索やTwitterから各記事に直接訪問することがわかりました。そこで回遊率向上のために、記事を読み終わった後にある関連記事をパーソナライズすることにしました。ユーザーに合った記事を表示することで、好みの記事が見つかるサイトであるという体験も提供でき、再訪問率の向上も期待できます。
パーソナライズ手法の検討
レコメンド方式について
まずはレコメンド方式について調査し、主に以下の方式があることを把握しました。
- コンテンツベースフィルタリング
- 協調フィルタリング
それぞれ長所と短所があり、状況に応じて使い分けることが必要です。
コンテンツベースフィルタリングは、アイテムの属性情報をもとに類似度を計算することで、ユーザーの好みに合わせたレコメンドを作成します。一方協調フィルタリングは、ユーザー同士の評価値の相関関係を分析することで、ユーザーの行動履歴から類似ユーザーを見つけ、そのユーザーが好んだアイテムをレコメンドするアルゴリズムです。
今回は新規ユーザーが多いため、コンテンツベースフィルタリングを採用する方向で進めていました。一方でより様々なアイテムのレコメンドを行うために、協調フィルタリングも併せて活用できるのではと考えました。結果的に、協調フィルタリングとコンテンツベースフィルタリングを組み合わせたレコメンドアルゴリズムを採用することとなりました。
サービスの比較
3つのサービスを項目ごとに比較しました。今回比較したサービスはどれも前項で説明したレコメンド方式の両方を提供していました。
比較項目 | Amazon Personalize | Google Recommendations AI | Algolia Recommend |
---|---|---|---|
レコメンドアルゴリズム | - 一緒に購入される - 関連 - 類似 - あなたへのおすす - トレンド - 人気 - 最近見た - ユーザーセグメント - パーソナライズランキング - 新しいアイテムのレコメンド |
- 一緒に購入される - 関連 - 類似 - あなたへのおすすめ - 最近見た - もう一度購入 - セール中 |
- 一緒に購入される - 関連 - 類似 - トレンド |
ハイパーパラメータの調整 | ○ | ○ | × |
トレーニング頻度の調整 | ○ | ○ | × |
月間20万リクエストでの概算料金 | 300USD | 400USD | 120USD |
特徴 | - AWSの他のサービスと連携しやすい | - モデルの最初のトレーニングに2-5日必要 - 検索機能も同時に導入可能 |
- UIライブラリがある - 検索機能も同時に導入可能 |
比較検討の結果、次の理由でAmazon Personalizeを選択しました。まずは様々なユースケースに対応していることです。ウェブメディアでも様々なアルゴリズムが試せると考えました。2つ目はMLモデルの調整ができることです。パーソナライズを導入するのが初めてのことであり、効果検証をする中でパーソナライズの精度を調整する可能性も考えたためです。それぞれのサービスに特徴があるので、実装したい機能に応じて使い分けると良いと思います。
Amazon Personalizeの実装
実装の流れ
上記の通りAmazon Personalizeを採用しました。理解しやすいように、大まかな実装の流れを挙げます。
- データセットグループの作成
- インタラクションデータの収集
- アイテムデータのアップロード
- ソリューションとソリューションバージョンの作成
- キャンペーンの作成
- レコメンドの取得
※個人的に理解につまづいた用語の説明を加えます。
用語 | 説明 |
---|---|
ソリューション | アルゴリズムやパラメータの管理 |
ソリューションバージョン | トレーニング済みのMLモデル |
キャンペーン | APIでレコメンドを取得できるようにデプロイ |
実装の結果、以下のようにレコメンドが取得できました。左が従来通りで、右がレコメンドです。この結果は、「「ゲーム業界が考えるメタバースとは全く異なる」日本でも話題の「AGLET」が描く戦略とビジョン」という記事の関連記事であり、記事内容に沿ったレコメンドが確認できます。
アーキテクチャ
実装に当たって主に以下のサービスを採用しました。
- Amazon API Gateway
- AWS Lambda
- Amazon Personalize
Amazon PersonalizeのSDKをJavaScriptで直接呼ぶことも可能ですが、AWS LambdaやAPI Gatewayを用いたアーキテクチャを採用した理由は、以下の通りです。
- PersonalizeのイベントトラッカーやキャンペーンのARNを隠蔽できる
- API GatewayのCORSの設定によりブラウザからの不要なリクエストを除ける
実装での工夫点
採用したアルゴリズム
Amazon Personalizeではレシピと呼ばれる、ユースケースごとのアルゴリズムが用意されています。コールドスタートの新規ユーザーを考慮し、インタラクションデータに加えてアイテムデータを利用したレコメンドを行う、Similar-Itemsのレシピを選択しました。これは先述の、協調フィルタリングとコンテンツベースフィルタリングのハイブリッドを意味します。
アイテムデータの更新頻度
新規ユーザーが多いことを踏まえると、アイテムデータの類似度によるレコメンドが役立ちます。そのため新規で公開された記事もレコメンドへ反映されるよう、記事の公開に合わせて毎日再トレーニングが実行されるよう設定しました。処理は定時にGitHub Actionsで実行されます。
ユーザーの識別
ユーザーのインタラクションを記録するには、IDなどで区別する必要があります。しかしサイトにはログイン機能がないため、ユーザーを識別する手段としてGoogle Analytics 4 (GA4)のClient IDを利用しました。一方でGA4が無効になっているユーザーに対しては、従来通りの記事リストが表示されるようにします。
注意点
AWS Personalizeのサンプルリポジトリが古い
AWS LambdaやAPI Gatewayの実装には、CFnの拡張機能で利便性が高いAWS SAMを活用しました。AWS SAMはCLIから操作をするのですが、AWS Quick Start Templatesというコマンドがあります。このコマンドにより様々な実装例が確認でき大いに参考になりました。
当初はAmazon Personalizeのサンプルリポジトリにある、streaming_eventsというコードを参考にしていました。しかしこのコードはAPI Gatewayの書き方などが古く、大部分を書き直す必要がありました。アーキテクチャを考える上で参考になりますが、お気をつけください。
データの収集には時間がかかる
ソリューションを作成するために必要なデータ量は、2回以上のインタラクションがあるユニークな25人以上のユーザーによる1,000回のインタラクションで、推奨は50,000回です。そのため、計画を立てる上でデータの収集期間をしっかりと見積もることが大切です。もしくは既にあるアナリティクスのデータなどを用いることができれば、早く済ませることができます。
まとまった料金が発生する
Amazon Personalizeを利用する上で主に発生する料金は、(1)MLのトレーニングと(2)レコメンドがデプロイされている期間です。
トレーニングにはトレーニング時間(4v CPUと8GiBメモリを使用する1時間のコンピューティング性能)という単位で料金が発生します。トレーニングをする頻度は、料金も踏まえて検討する必要があります。仮に毎日10トレーニング時間を利用した場合、1か月で72USDかかることになります。
レコメンドがデプロイされている期間、つまりキャンペーンが存在する期間は料金が発生します。TPS時間という単位で料金が発生しますが、これが最低でも1時間あたり0.20USD、1か月で144USD程度かかります。
まとめ
Amazon Personalizeを採用することで、関連記事リストのパーソナライズを実現しました。Amazon Personalizeは、様々なアルゴリズムを利用でき、一部の設定は微調整もできます。上記注意点に挙げたデータの収集や、サンプルリポジトリが古いことに気づくまでに時間がかかったこともあり、運用開始までに2人で約1.5か月かかりました。ただAWSに日常的に携わって詳しい方なら、1-2週間で運用開始できるのではないでしょうか。
MLの実装知識がなくても利用できるのも魅力の1つです。もちろんどのレシピを選択すべきかなどはMLの仕組みを踏まえて検討するため、その知識は必要になります。現在は結果を踏まえ分析をし、より良いレコメンドが行えるように調整しています。レコメンドの効果までお伝えできなかったのは残念ですが、実装の参考になれば幸いです。
ZOZO NEXTでは、様々な技術を取り入れUXを最大化しながらプロダクト開発に取り組んでいます。絶賛仲間を募集しておりますので、興味を持ってくださった方は以下をご確認ください。
カジュアル面談はこちらからご応募ください。
募集している職種はこちらからご確認ください。