AWS Amazon Forecastで機械学習アルゴリズムを使用して時系列予測をする


Amazon Forecastとは

統計アルゴリズムと機械学習アルゴリズムを使用して、時系列予測を実現するフルマネージドサービスです。

Amazon.comでの時系列予測で使用されているものと同じテクノロジーに基づいており、最先端のアルゴリズムで提供されます。
また、機械学習の経験は必要ありません。

一般的なユースケースとしては、下記のようなものがあります。

  • 小売の需要計画
    製品需要を予測し、さまざまな店舗の場所に合わせて、在庫と価格をより正確に設定できるようにします。
  • サプライチェーン計画
    製造に必要な原材料、サービス、またはその他の項目の量を予測します。
  • リソース計画
    人員配置、広告、エネルギー消費、およびサーバー容量の要件を予測します。
  • 運用計画
    ウェブトラフィック、AWS の使用状況、および IoT センサーの使用状況のレベルを予測します。

データセットドメインとデータセットタイプ

予測を行うにはデータセットを作成し、データセットグループに追加します。

作成したデータセットにデータセットドメインとデータセットを関連付けます。

データセットドメインには下記が選択できます。

  • RETAIL ドメイン
    小売の需要予測
  • INVENTORY_PLANNING ドメイン
    サプライチェーンとインベントリの計画
  • EC2 CAPACITY ドメイン
    Amazon Elastic Compute Cloud (Amazon EC2) の容量を予測するため
  • WORK_FORCE ドメイン
    従業員の計画
  • WEB_TRAFFIC ドメイン
    今後のウェブトラフィックの見積もり
  • METRICS ドメイン
    収益およびキャッシュフローなどの予測メトリクス
  • CUSTOM ドメイン
    その他すべての時系列予測のタイプ

データセットは下記の3つのタイプとなります。

  • ターゲット時系列 (必須)
    唯一必要なデータセットタイプ。このタイプは、予測を生成するターゲットフィールドを定義します。たとえば、一連の製品の売上を予測する場合は、予測する製品ごとに履歴の時系列データのデータセットを作成する必要があります。同様に、予測する収益、キャッシュフロー、売上などのメトリクス用のターゲット時系列データセットを作成できます。
  • 関連する時系列
    ターゲットの時系列データに関連する時系列データ。たとえば、価格は製品の売上データに関連しているため、関連する時系列として指定できます。
  • 項目メタデータ
    ターゲットの時系列データに適用可能なメタデータ。例えば、特定の商品の売上を予測している場合 ブランド、色、ジャンルなどの商品の属性は項目メタデータの一部になります。EC2 インスタンスの EC2 キャパシティを予測するとき、メタデータにはインスタンスタイプの CPU とメモリが含まれる場合があります。

事前設定

それでは設定していきます。

今回は下記の公式サイトのチュートリアルに沿って設定を行います。

https://docs.aws.amazon.com/ja_jp/forecast/latest/dg/getting-started.html

トレーニングデータのアップロード

electricityusagedata.zipをダウンロードして解凍します。

解凍したファイルをS3バケットにアップロードします。

下記のファイルの一部抜粋にあるように、利用時間,電力使用量,クライアントIDの項目に分かれており、クライアンID毎に1時間毎に電力使用量が記されております。

2014-01-01 01:00:00,2.53807106598985,client_0
2014-01-01 01:00:00,23.648648648648624,client_1
2014-01-01 01:00:00,0.0,client_2

IAMポリシーの作成

Forecastではファイルのインポートとエクスポートする為にS3へのアクセス権限が必要になります。

下記の内容でポリシーを作成します。
bucket-nameをS3バケット名に書き換えてください。

今回は、allow_test-bucket-it-oujiという名前でポリシーを作成しました。

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:Get*",
            "s3:List*",
            "s3:PutObject"
         ],
         "Resource":[
            "arn:aws:s3:::bucket-name", 
            "arn:aws:s3:::bucket-name/*" 
         ]
      }
   ]
}

IAMロールの作成

次に、IAMロールを作成します。

ロールを作成をクリックして、

信頼されたエンティティタイプ:AWSのサービス
ユースケース:EC2

を選択します。

作成済のポリシーallow_test-bucket-it-oujiを選択します。

ロール名:ForecastRole

と入力して、一旦ロールを作成を完了します。

このままでは、信頼関係(principal)がec2になっているので、forecastに変更します。

作成されたロールを選択して、信頼関係タブをクリックし、信頼ポリシーを編集ボタンをクリックして、信頼ポリシーを下記に変更します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "forecast.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

トレーニングデータのインポート

forecastサービスからCreate dataset groupボタンをクリックします。

Dataset group name:my_dsgroup
Forecasting domain:Custom

Dataset name:my_dataset
Frequency of your data:1hour
Data schema:JSON schemaを選択して下記のschemaを入力

{
	"Attributes": [
		{
			"AttributeName": "timestamp",
			"AttributeType": "timestamp"
		},
		{
			"AttributeName": "target_value",
			"AttributeType": "float"
		},
		{
			"AttributeName": "item_id",
			"AttributeType": "string"
		}
	]
}

Dataset import name:my_dsimportjob
Data location:S3にアップロードしたファイルのS3 URI
Custom IAM role ARN:作成したIAMロール(ForecastRole)のARN

予測子のトレーニング

インポートが完了後、予測子をトレーニングします。

データセットグループのダッシュボードのTrain a predictorのStartボタンをクリックします。

Predictor name:my_predictor
Forecast horizon:予測を実行する期間を入力。今回は36時間としました。

その他の入力項目はデフォルトのままとしました。

予測の作成

次に予測子を使用して予測を作成します。

データセットグループのダッシュボードのGenerate forecastsのStartボタンをクリックします。

Forecast name:my_forecast
Predictor:作成した予測子(my_predictor)を選択

予測結果の取得

予測が作成されたら、単一のアイテムをクエリしたり、完全な予測をエクスポートする事ができます。

単一のアイテムをクエリー

データセットグループのダッシュボードのGenerate forecastsのQuery forecastボタンをクリックします。

Forecast:作成した予測(my_forecast)を選択
Start date:2015/01/01 00:00:00
End date:2015/01/02 12:00:00
  ※36時間の間隔は予測子をトレーニングしたForecast horizonに対応します。
Value:client_21(データセットに含まれている特定のクライアントID)

実行すると、下記の通りに予測が表示されました。

デフォルトの分位数は、p10,p50,p90となっております。(変更可能)

完全な予測のエクスポート

次に予測結果をエクスポートします。

作成した予測を選択して、詳細画面を表示してCreate forecast exportをクリックします。

Export name:my_forecast_export_job
Custom IAM role ARN:作成したIAMロール(ForecastRole)のARN
S3 forecast export location:S3のエクスポートする場所

しばらくするとS3にファイルがエクスポートされておりました。

分位数p10,p50,p90の値が出力されておりました。

item_id,date,p10,p50,p90
client_339,2015-01-01T01:00:00Z,17.500665443060036,28.253285334395336,37.24388618652974
client_339,2015-01-01T02:00:00Z,11.128412664437446,20.073487504470382,33.26756268784284
client_339,2015-01-01T03:00:00Z,6.59241143969121,15.883262909724161,30.800936006453778
client_339,2015-01-01T04:00:00Z,3.591523423895688,14.177114028651177,31.515768611610795
client_339,2015-01-01T05:00:00Z,-4.624901070367518,17.96228974234035,32.13093482158613
client_339,2015-01-01T06:00:00Z,11.330635919685239,23.185823296644966,41.83080496986132
client_339,2015-01-01T07:00:00Z,19.84688344206473,40.72576642059288,57.44246708803272
, ,

コメントを残す

メールアドレスが公開されることはありません。