Amazon Web Services ブログ

Amazon Neptuneでレジャー活動の提案をリアルタイムで生成

DoGet App は、友人と直接会って時間を共有するためのモバイルアプリケーションです。

この投稿では、DoGet Appが彼らのユースケースに対応し、リアルタイムのアクティビティ提案とマッチメイキングを可能にする Amazon Neptune に支えられたグラフデータモデルをどのように採用したかについて紹介します。

この目的のために構築されたデータベースに対するアプローチにより、彼らのサーバーレスアーキテクチャは、AWS AppSync、AWS Amplify、AWS Lambda、Amazon Simple Storage Service (Amazon S3)を使用し、ローンチ時のスケールと1日あたり数千の新規ユーザーをサービス利用可能にすることを可能にしました。AWSのマネージドサービス上に構築することで、DoGet Appは開発開始からローンチまでわずか6ヶ月と、市場投入までの時間を大幅に短縮することができ、同時にローンチ前の開発工数とローンチ後の運用オーバーヘッドを統合することができました。

上へスワイプすると、そのアクティビティに興味がないことを示し、下へスワイプすると、興味があることを示し、ユーザーがいつ参加できるか(明日や今週など)のフォローアップを促します。そして、DoGet Appは、同じ時間に同じ体験を共有することに興味がある友人をマッチングします。

アプリケーションの設計と立ち上げ時の課題

DoGet Appは、アプリケーションを設計する際にいくつかの課題に直面しました。
まず第一に、多くのマッチメイキング・アプリケーションは、リアルタイム性を考慮することなく、データの読み込み時間を短縮するために事前に提案を生成します。一方、DoGet Appは、過去の習慣や好みだけでなく、他にも多くの提案を生成します。コンテンツの要素は、ユーザーの現在地、天候、友人からの反応を取り入れるため、リアルタイムで提案を生成する必要がありました。

この課題に取り組むため、DoGet Appは自社のアルゴリズムに合わせたグラフデータモデルを持つAmazon Neptuneを使用しました。Amazon Neptuneのグラフデータベースには、ユーザーのすべての人間関係、興味、交流の全体的な状態が一貫してリアルタイム性の高い状態で表現することができ、それに基づいて提案やマッチングがリアルタイムで作成されます。

DoGet Appは、ユースケースに適したデータモデルを選択することに加え、ゼロからユーザーベースのアプリケーションを構築する必要があったため、予測不可能な負荷やトラフィックの増加に対応できるスケーラブルなソリューションが必要でした。また、ユーザーを増やしながら得られた新たな洞察に基づいて、グラフデータモデルと対応するアルゴリズムを迅速に反復構築できる運用モデルも必要でした。

ソリューションの概要

このセクションでは、アプリケーション・アーキテクチャのハイレベルな概要を説明します。
次の図は、アプリケーションのフロントエンドとバックエンド、およびデータ分析機能を含むアーキテクチャ図です。

モバイルアプリケーションのフロントエンドは、AWS Amplify クライアントライブラリを使用して、AWSクラウドのバックエンドリソースに接続します。典型的なリクエストの流れは以下のようになります。

  1. モバイルクライアントは、静的なフロントエンドアセットを Amazon S3 から取得します
  2. Amazon Cognito への認証後、AWS AppSync が提供するバックエンドAPIにアクセスできるようになります
  3. リクエストはその後、AWS Lambda 関数によって処理されます
  4. Amazon DynamoDBAmazon Neptune から情報を照会し、APIリクエストに対するレスポンスを生成します
  5. これらのリクエストに対応する過程で、分析データはAmazon S3のデータレイクに保存されます
  6. そこから Amazon Athena で分析を行います

グラフデータモデル

DoGet Appの機能の中核は、フルマネージド・グラフデータベース・サービスであるAmazon Neptuneに支えられた専用グラフデータベースです。Neptuneを利用することで、DoGet Appは、メンテナンス、バックアップ、スケーリングなどの運用タスクをオフロードすることで、アプリケーションに関連する実際のデータモデルとアルゴリズム設計に集中することができます。

DoGet Appのユースケースにどのようなメリットがあるかを理解するために、グラフデータモデルを深く掘り下げてみましょう。基本的に、グラフのノードはアプリケーションのエンティティを表し、エッジはそれらの間の関係を表します。次の図は、アプリのデータモデルにおける一般的なエンティティを示しています。

この例では、ユーザーLisaSophieBennyを表す3つの人物ノードを示しています。人物ノード間のエッジは、それらの友好関係を表します。そして、3つのトピック・クラスタ・ノード(OutdoorNature LoverHiking)に関連する1つのアクティビティ・ノード(Explore unknown paths in the surrounding by bike)があります。
データモデルには、ジオハッシュ の形で位置情報も組み込まれています(このアプローチでは正確な位置情報は必要ありません)。この情報は、以下の図に示すように、地域ノードによってグラフデータモデルで表現されます。

位置は、その地域に適したアクティビティや天候、また現在地や過去地 点のユーザーと関連しています。エッジの重みは、関係の強さをモデル化するために使用されます。DoGet Appはユーザーを直接つなぐことを目的としているため、位置情報は提案やマッチメイキングを生成する際に特に関連性が高く、特に天候情報を組み込むためにも使用できます。

リアルタイムで提案を生成

ユーザーがその日初めてDoGet Appを開くたびに、一連のアルゴリズムが30~50の活動提案を生成します。これらのアルゴリズムはすべて、Neptuneに保存されているリアルタイムのグラフ表現を直接または間接的に使用しています。バランスの取れた提案のために、さまざまなアルゴリズムを組み合わせて使用します。例えば、新しいアクティビティでユーザーの興味を引くことを目的とするアルゴリズムもあれば、最近友達に好かれたアクティビティを優先してマッチングの可能性を高めるアルゴリズムもあれば、グラフ内の他のエンティティに対するユーザーの最も強い関係を利用するアルゴリズムもあります。

後者に焦点を当てたアルゴリズムの例を探ってみましょう。このアルゴリズムは、ユーザーから出発して、ユーザーがグラフ内で(直接的あるいは間接的に)接続しているアクティビティへのさまざまなパスを探索します。接続の強さとそのタイプ(直接的か間接的か、たとえば友人経由かトピック・クラスタ経由か)に応じて、アルゴリズムはこれらのアクティビティに対するメトリクスを計算し、次の図に示すように、それに基づいて提案を生成します。

このアルゴリズムは、あらゆる種類のコネクションを組み込んでいますが、他のアルゴリズムでは、特定の側面、例えば、地域の活動やその地域で現在起こっているイベントの提案を提供するために、ユーザーの現在地を重視しています。

アルゴリズムに関係なく、グラフデータ構造はリアルタイムで提案を生成するDoGet Appに最適です。さらに、グラフはマッチメイキングにも適しています。ユーザーがアクティビティに興味を示すたびに、マッチング候補がグラフの近くに表示され、すでに友達が気に入っているすべてのアクティビティが含まれ、効率的にクエリできます。

新しいコンテンツを取り入れ、より深い洞察を得る

グラフ内のほとんどの関係と対応するエッジの重みは、ユーザーの嗜好と過去の行動に従って時間の経過とともに確立されますが、他のものは明示的にモデル化されます。たとえば、ユーザーがアクティビティに「いいね!」を押して興味を示すと、そのアクティビティと関連するノードとの関係が強化され、接続エッジの重みが増加します。特にローンチ時には、新しいコンテンツ要素の提案を生成することは困難であることが判明しました。前のセクションで説明したように、新しいアクティビティを統合するための1つのアプローチは、アルゴリズムの組み合わせです。

DoGet Appが現在評価しているもう1つのアプローチは、Amazon Neptune ML を使用することで、グラフ内の関係だけでなく、例えばアクティビティのテキスト記述の類似性などに基づいて提案を行うことです。

最後に、DoGet Appは、アクティビティ提案という点で、提供するコンテンツの改善を常に行っています。そのために、アプリの利用データはAmazon S3に保存され、Athenaで分析して洞察を得ることができます。しかし、グラフのエッジの重みは、嗜好や過去の利用状況を反映して動的に適用されるため、DoGet Appは、最も強いエッジを調べることで、グラフに基づいて分析クエリを実行することもできます。例えば、特定の地域で最も人気のある3つのアクティビティを見つけるには、以下のGremlinクエリを実行し、接続されたアクティビティのエッジの強さで順序付けることができます。

%% gremlin 
g.V('target-region') 
 .outE().has(label,'goodFor')
 .order().by('strength',desc).limit(3)
 .inV().unfold().values('name')

DoGet Appは、従来のアナリティクスと併用して、これらの洞察をサービスの改善に活用しています。

まとめ

Amazon Neptuneによって、DoGet Appは独自のグラフデータベース管理システムの管理に伴う複雑さを伴うことなく、グラフデータモデルを中心にアプリケーションを構築することができました。このデータモデルと関連アルゴリズムは、DoGet Appが卓越したユーザー・エクスペリエンスを実現するのに役立ちました。グラフアルゴリズムに基づくサジェストは、約25パーセントの受け入れ率を実現しています。さらに、彼らのマッチメイキング・アルゴリズムは、アクティブな友達を持つユーザーとの毎日のマッチングを実現しています。AWSのマネージドサービスを利用することで、DoGet Appはアプリケーションデザインやコンテンツ作成といった差別化に集中することで、ビジネス価値を迅速に生み出すことができます。
この記事を読んで、あなたのユースケースに合ったグラフデータモデルを評価してみたくなりましたか?
それなら、Amazon Neptune の ユーザーガイド をチェックし、GitHubでNeptuneのサンプル をハンズオンしてみましょう。

著者について

Michael Meidlingerは、AWSのシニア・ソリューション・アーキテクトで、規制産業のエンタープライズ顧客を担当しています。信号処理、統計、ネットワーキング、組み込みシステム開発、Linuxシステム管理のバックグラウンドを持ち、電気通信工学の博士号を取得しました。AWS入社以前は、ミッションクリティカルなコンピュートシステムと安全なクラウドコンピューティングコンセプトに従事しています。

Nils Müllerは、オーストリアで生まれで、ウィーナー・ノイシュタットで経営工学を学びました。在学中の2000年に1000PS Internet GmbHを設立しました。1000PSというブランドで、同社はモーターサイクルをテーマとする世界有数のコンテンツプロバイダーとなりました。COVID-19の流行時に、DoGetアプリのアイデアを思いつきました。

本記事は 2023/06/03に投稿された Generate suggestions for leisure activities in real time with Amazon Neptune を翻訳した記事です。翻訳はソリューションアーキテクトの木村 達也が行いました。