Amazon Forecastは機械学習によって時系列データの予測を行うマネージドサービス。 ドメインやアルゴリズムを選んでデータを投入すればそれらしい出力が得られる。 まずこれで予測してみて、その結果をベースラインとしてSageMakerなどで自作したモデルを評価するといった使い方もできる。
SageMakerでPyTorchのモデルを学習させる - sambaiz-net
料金はデータストレージに$0.088/GB
、学習に$0.24/hour
、予測に$0.60/1000回
かかる。
今回は開発者ガイドと同じく 電力消費量のデータセットを用いて動かしてみる。
$ head electricityusagedata.csv
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
2014-01-01 01:00:00,144.81707317073176,client_3
...
データのインポート
まずドメインを選んでDataset groupを作成する。Dataset groupには予測対象の時系列データに加えて、他の関連する時系列データやメタデータを含めることができる。
CSVをS3に置き、それを読めるRoleを渡してインポートする。データの間隔とカラムの順は元データと合致するように設定する。
タイムスタンプは yyyy-MM-dd
か yyyy-MM-dd HH:mm:ss
の形式である必要がある。
学習
インポートが終わるとTrain predictorできるようになる。 予測の間隔と期間を設定し、アルゴリズムを、AutoMLか、ARIMAやCNN-QRといったものの中からマニュアルで選んで学習を始める。
時系列データのMAモデルとARモデル、その定常性と反転可能性 - sambaiz-net
ハイパーパラメータの最適化や、国ごとの祝日や天気を考慮するオプションもある。
予測
学習が終わるとCreate a forecastして予測値を得られる。
Goでの取得はこんな感じ。
package main
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/forecastqueryservice"
)
func main() {
mySession := session.Must(session.NewSession())
svc := forecastqueryservice.New(mySession)
ctx := context.TODO()
output, err := svc.QueryForecastWithContext(ctx, &forecastqueryservice.QueryForecastInput{
ForecastArn: aws.String("arn:aws:forecast:ap-northeast-1:*****:forecast/testforecast"),
Filters: map[string]*string{"item_id": aws.String("client_367")},
// StartDate: aws.String("2015-01-01T01:00:00"),
// EndDate: aws.String("2015-01-02T12:00:00"),
})
if err != nil {
panic(err)
}
fmt.Println(output.Forecast.Predictions["p50"][0])
/*
{
Timestamp: "2015-01-01T01:00:00",
Value: 178.90061950683594
}
*/
}
GoでAmazon Forecastに時系列データをimportしPredictorを作成して予測結果をS3にexportする - sambaiz-net