QuickSightのサンプルデータでML Insightを使用した予測機能を試してみる

QuickSightのML Insightを使うと、ビルトインの機械学習機能で簡単に推移の予測などができました。
2023.08.01

データアナリティクス事業本部 機械学習チームの鈴木です。

QuickSightのML InsightのMLを使用した予測機能を利用したく、ユーザーガイドの『Amazon QuickSight で ML Insights を使用するためのデータセット要件 - Amazon QuickSight』で公開されているML Insights Sample Dataset VIを使って試してみました。

知りたかったこと

以下のことが知りたかったため、実際にQuickSightにデータを読み込んで予測を作成しました。

  • Athenaデータソースから読み込んだデータでもML Insightによる予測ができるのか
  • What-if分析がどのように使えるのか
  • データ件数がデータセット要件よりも少ない時に予測が表示されるのか

MLを使用した予測機能について

QuickSightのML Insightのうち、内蔵のRandom Cut Forestアルゴリズムを使用して主要なビジネスメトリクスなどの値を予測することができます。

この機能については以下のユーザーガイドのページに記載があるのでご確認ください。

データの準備

まず、ml-insights.csv.zipをユーザーガイドからダウンロードして、検証用のS3バケットにアップロードしました。

サンプルデータのアップロード

次に、以下のSQLをAthenaで実行し、sample_dbデータベースにml_insights_rawテーブルを作成しました。

-- <検証用のS3バケット名>の箇所は自分の環境のものに変えてください。
CREATE EXTERNAL TABLE `sample_db.ml_insights_raw`(
  `aggregate_day` string COMMENT 'aggregate day',
  `product_categories` string COMMENT 'product category',
  `geo` string COMMENT 'geography',
  `revenue` float COMMENT 'revenue')
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://<検証用のS3バケット名>/ml_insights'
TBLPROPERTIES (
  'classification'='csv', 
  'columnsOrdered'='false', 
  'compressionType'='none', 
  'skip.header.line.count'='1', 
  'delimiter'=',')

このとき、ワークグループは以下のようなワークグループを使用しています。クエリの結果の場所以外のクエリに関する設定はデフォルトです。これはAthenaデータソースの作成時にも使用します。

検証に使用したワークグループ

以下のようにml_insights_rawテーブルからサンプルのデータが検索できるようになりました。

aggregate_dayカラムをDATE型にして、データのフォーマットもPARQUETにしておきたかったので、以下のようにCTASでテーブルを再作成しました。

-- <検証用のS3バケット名>の箇所は自分の環境のものに変えてください。
CREATE TABLE sample_db.ml_insights
WITH (
      external_location = 's3://<検証用のS3バケット名>/ml_insights_parquet/',
      format = 'PARQUET')
AS SELECT 
  DATE(date_parse(aggregate_day, '%m/%d/%y')) AS aggregate_day,
  product_categories,
  geo,
  revenue
FROM sample_db.ml_insights_raw

最後に、データ件数がデータセット要件よりも少ない時に予測が表示されるのかの確認用に、1ヶ月分のデータに絞ったテーブルも作成しておきました。

-- <検証用のS3バケット名>の箇所は自分の環境のものに変えてください。
CREATE TABLE sample_db.ml_insights_tmp
WITH (
      external_location = 's3://<検証用のS3バケット名>/ml_insights_parquet_tmp/',
      format = 'PARQUET')
AS SELECT *
FROM ml_insights
WHERE aggregate_day BETWEEN DATE '2018-05-01' AND DATE '2018-05-31' 
  AND product_categories = 'Books'
  AND geo = 'Japan'

以下のように31件だけデータが入っています。Amazon QuickSight で ML Insights を使用するためのデータセット要件 - Amazon QuickSightによると、データの粒度が毎日の場合、少なくとも38日のデータが必要なので、データセット要件を満たさないデータと言えます。

少ないデータ件数のテーブルの件数

やってみる

Athenaデータセットの作成

まずAthenaデータセットの作成から進めていきました。

QuickSightの管理画面のデータセットより新しいデータセットを選択しました。

データセットの作成

データセットを作成でAthenaを選択しました。

Athenaのデータセットを作成

新規AthenaデータソースでAthenaのワークグループを選択してデータソースを作成を押しました。

新規Athenaデータソース

テーブルの選択でデータベースとテーブルを選択しました。

テーブルの選択

データセット作成の完了データクエリを直接実行を押しました。Visualizeを押して分析を新しく作成しました。

データセット作成の完了

新規シートでインタラクティブシートを選びました。

新規シート

折線グラフの作成

作成したAthenaデータセットで折れ線グラフを作成し、予測を行なってみました。ビジュアルタイプで折線グラフを選び、フィールドウェルにX軸と値を設定しました。

折線グラフの作成

以下のようにできました。値は平均としました。この時点で自動的にAthenaにクエリが実行されて、グラフが描画されました。非常に便利ですね。

可視化結果

予測機能の利用

グラフ右上の三点リーダから予測を追加を押しました。

予測の追加

以下のように予測プロパティの設定が表示されると同時に、デフォルト値でオレンジ色の予測が生成されました。

デフォルトの予測結果

範囲を絞るとより分かりやすいですね。

範囲を絞った結果

ユーザーガイドによると、予測の長さ期間を戻すでは過去分のデータから予測の基礎となるパターンを探せるようです。

期間を戻すを含めた結果

what-if分析の利用

オレンジの部分をクリックすると、以下のようにwhat-if分析のボタンが出てくるのでクリックしました。

what-if分析

シナリオを日付のターゲットを設定として日付とターゲットを指定すると、その値を達成するまでにどのような推移が期待されるかの予測結果が確認できました。これでビジネス指標がどのように推移すべきか傾向を踏まえて目安が分かるので、現在の施策がどの程度効果があるか確認できそうです。

what-if分析の結果

少ないデータ数での予測

最後にml_insights_tmpテーブルのデータを使って少ないデータ数でも予測ができるか確認しました。

先と同じようにml_insights_tmpAthenaデータセットを作成して、折線グラフで可視化しました。予測も設定しています。

少ないデータ数での可視化例

作成した可視化だけ見ると以下のようになっていました。予測は生成されました。今回のデータはほとんど値が一定だったので予測もバンドが狭くなっていました。

少ないデータ数での予測

データセット要件は満たさなくても予測自体はされるようです。ただし、予測結果は保証されないので、データ点数が少ない場合はより粒度の細かいデータセットを使う必要があります。

最後に

QuickSightのサンプルデータで、ML Insightを使用した予測機能を使った際の流れと、サンプル数が少ない時の挙動について確認してみました。

参考になりましたら幸いです。