Amazon Personalizeのデータセットインポートに増分モードが追加されました

Amazon Personalizeのデータセットインポートに増分モードが追加されました。時間とともに増大するインポートデータから解放されそうですね。
2022.08.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部 インテグレーション部 機械学習チームの貞松です。

Amazon Personalizeのデータセットインポートジョブは全件置き換えのみでしたが、サービスアップデートにより増分モードが追加されました。
これにより、例えば日毎のデータをインポートするような要件に対して、インポートするデータが時間とともに増加してしまっていたところが、1日分の差分データをインポートするだけで済むようになります。
本記事では、増分モードを使用したデータセットインポートの実行手順と処理の仕様についてまとめます。

データセットインポートの概要

Amazon Personalizeには、レコメンドモデルの学習データをデータセットという形式で保持しており、データセットの種類として3つのタイプがあります。
必須のデータセットはInteractionsのみなので、最低限Interactionsさえデータがインポートされていればレコメンドモデルを作成することが可能です。

  • Interactions (必須のデータセット)
    • ユーザーとアイテム間のインタラクションデータ、例えばECサイトにおける「どのユーザー、どの商品を、いつ買ったか」という購買履歴データがこれに該当します。
  • Items (任意のデータセット)
    • アイテムに関するメタデータ、ECサイトの例えでいけば、商品のカテゴリや価格、在庫状況などがこれに該当します。
  • Users (任意のデータセット)
    • ユーザーに関するメタデータ、ECサイトの例えでいけば、ユーザーの年齢や性別、会員ランクなどがこれに該当します。

それぞれのデータセットで定義可能なスキーマなどが定められていますが、諸々の詳細は下記の公式ドキュメントをご参照ください。

データセットインポートジョブでは、予めデータセットのスキーマに合わせて作成したCSVファイルをS3バケットに配置し、配置されたCSVファイルからデータをインポートします。

サービスアップデート以前は、各データセットに対するデータインポートは既存データを含む全件を毎回インポートする必要がありました。
アップデートにより、既にインポート済みのデータはインポートデータから除外して、増分データや差分データのみをインポートすることができるようになりました。

増分モード(INCREMENTAL)によるデータセットインポートの注意点

増分モードでデータセットインポートをする際には以下の注意点があります。

  • データセットに対して、1回以上一括モードでデータセットインポートを実行済みでなければならない
  • IDが同一のレコードがインポートデータに含まれる場合は、新しくインポートしたデータで上書きされる

※「IDが同一」の部分については以降のセクションで検証します。

公式ドキュメントの記載はこちら↓です。

一括モード(FULL)を使用したデータセットインポートの実行

以降でデータセットインポートについて検証していきますが、本記事ではInteractionsデータセットのみを対象として検証を実施しています。

まずは一括モードで一度データセットインポートジョブを実行します。
インポートするデータは、ユニークuser_idが1〜30で、レコード数4879件のCSVファイルです。

データセットインポートジョブ作成の画面で、Import modeとして「Replace existing dataset」を選択して実行します。

データセットインポートジョブ完了後に、実際にインポートされたデータの中身を確認する為にデータセットエクスポートジョブを実行してCSVファイルとして取得します。
無事にデータがインポートできていることが確認できました。
※エクスポートされたCSVはtimestampでソートされた状態で出力されるので、user_idとitem_idでソートし直す都合上、Excelでファイルを開いて確認しています。

増分モード(INCREMENTAL)を使用したデータセットインポートの実行

次に増分モードでデータセットインポートジョブを実行します。
インポートするデータは、ユニークuser_idが31〜60で、レコード件数が3873件のCSVファイルです。

今度はImport modeとして「Append to current dataset」を選択して実行します。

一括モードでデータセットインポートを実行した時と同様に、データエクスポートを実行して中身を確認します。
無事にユニークuser_idが1〜60でレコード数が4879+3873=8752件のデータセットとなっています。

重複データを増分モード(INCREMENTAL)でインポートした際の挙動

重複データをインポートした際の挙動について検証します。

増分モードのデータセットインポートの仕様として

IDが同一のレコードがインポートデータに含まれる場合は、新しくインポートしたデータで上書きされる

とありましたが、この辺りについて確認していきます。

user_id, item_id, timestampが全て重複している場合

「一括モード(FULL)を使用したデータセットインポートの実行」のセクションで使用したものと全く同じCSVファイルを再度増分モードでインポートしてみます。

結果として、データセットに保持しているデータに変化は無かった為、重複データについては全て上書きされた模様です。

user_id, item_idが重複している(timestampは重複していない)場合

次に「一括モード(FULL)を使用したデータセットインポートの実行」のセクションで使用したCSVファイルを編集してtimestampの値を幾つか書き換えたファイルを増分モードでインポートしてみます。

結果として、データセットに保持しているデータに対して、timestampを書き換えたレコードが追加になっています。
データセットに必須のスキーマが全て重複しているデータについては上書き、一つでも異なる場合は増分データとして追加される挙動になっているようです。

まとめ

Amazon Personalizeのサービスアップデートで追加された増分モードのデータセットインポートをご紹介しました。
同じファイルを複数回インポートしても冪等性は担保されるので、安心してデータセットの増分更新を導入することができそうです。