Analytics Cloudを活用したPOSデータ分析：商品売上予測②(Forecast関数の活用）

# 利用環境 #

データベース：Oracle Autonomous Data Warehouse　容量(1OPCU)

BIサービス：Oracle Analytics Cloud  機能セット(Enterprise Analytics) 、容量(２OPCU)



# 用意したデータについて #

アパレル事業の店舗POS売上明細データ：　ID付きPOSデータなので、会員ID付きの売上データです。商品属性（カラーコード、サイズ）、ブランドなどは、連結済み

会員マスタデータ：会員の基本属性データですが、ポイント増減に関する情報も、連結済みのデータ





# Analytics Cloudを活用したPOSデータ分析：商品売上予測②(Forecast関数の活用）


以前は、[ビジュアライゼーションの拡張分析機能の予測を利用した商品売上予測を行う方法](https://qiita.com/Nakayamasan/items/286ca68d4855bf089c25)について御紹介しました。マウスを使った簡単な操作で、時系列予測分析をおこなうことが出来るので便利な機能ですが、予測値をデータとして取得できないので、予測した結果を利用したい場合に課題がありました。

今回は、Analytics Cloudの関数ライブラリに用意されているForecast関数を使って、自分で計算項目（カラム）を作成する方法について御紹介します。







完成形イメージ
**商品売上予測グラフ（特定店舗における直3年間のジャケット売上を元にした、向こう12か月の売上(着数)予測）**
![002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/aaaf7895-15d6-d902-0666-d12c9e10ccef.jpeg)


# Forecast関数の作成　



まず、”マイ計算”を右クリックして計算エディタを開きます。

![001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/adb4538e-b3c9-1f3b-923c-b8d6faaa25d5.jpeg)



Forecast関数をエディタ右側の関数ライブラリから選択して、エディタ上で任意のプロパティを設定して、念のため”検証”をクリックして、式が正しいことを確認してから、”保存”をクリックして式を保存します。

![001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/dbef8225-be5b-454f-f324-0619ab55fce7.jpeg)




予測(Forecast)関数の構文は、下記のとおりです

**構文** 

FORECAST(*numeric_expr, ([series]), output_column_name, options, [runtime_binded_options])*



**numeric_expr**：予測を行うメジャー項目（売上など）を指定

**Series**：予測計算を実施する時系列の粒度(期間ディメンション)を指定

**output_column_name**：予測結果の出力項目を指定。有効な値は、'forecast', 'low', 'high', ‘predictionInterval‘

-“forecast” :標準的な予測結果の出力

-‘low’ :予測の下限値を出力

-‘high’ :予測の上限値を出力

-‘predictionInterval’ :信頼区間を出力

**options**：*セミコロン(;)で区切られた、option nameとvaluesの組み合わせリスト。Valueについては、%1…%Nの形式で指定することが可能。（実際の値は、”runtime_binded_options”にバインド・リストとして指定）

**runtime_binded_options**：カンマ(,)で区切られた、カラムまたはオプションのリスト



**Options**の指定項目

| **Option**             | **Description**                                              | **Values**                                                   |
| ---------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| **numPeriods**         | 予測する将来期間の数。（デフォルト値=12）                    | 数値                                                         |
| **PredictionInterval** | 予測の信頼区間                                               | 0-100                                                        |
| **modelType**          | 適用する予測モデル                                           | ARIMA（自己回帰和分移動平均モデル）、または  ETS（指数平滑法モデル） |
| useBoxCox              | TRUEの場合は、BOX-COX変換（偏りのある分布のデータに対して正規分布に近づける前処理を実施する）を行う | TRUEまたはFALSE                                              |
| lambdaValue            | “useBOXCOX”＝TRUEの場合に、BOX-COX変換パラメータを指定。NULLの場合は、無視される。 | -                                                            |
| trendDamp              | ETS予測モデルを活用している場合のdampedパラメータとして指定。TRUEの場合、減衰トレンドモデルが適用される。NULLの場合は、減衰、非減衰トレンドの双方を検証の上、最適なモデルが適用される。 | -                                                            |
| errorType              | ETS予測モデルを活用している場合の、model パラメータとして”trendType” , ”seasonType”とセットで指定。 | additive(“A”),multiplicative("M"),automatically  selected ("Z") |
| trendType              | ETS予測モデルを活用している場合の、model パラメータとして”errorType” , ”seasonType”とセットで指定。 | none("N"), additive("A"),  multiplicative("M"), automatically selected("Z") |
| seasonType             | ETS予測モデルを活用している場合の、model パラメータとして”errorType” , ”trendType”とセットで指定。 | none("N"),   additive("A"), multiplicative("M"), automatically  selected("Z") |
| modelParamIC           | モデル選定時の情報基準                                       | “ic_auto“, ”ic_aicc“, ”ic_bic“, ”ic_auto” (デフォルト値）    |



パラメータの数は多いですが、**Options**に関しては、   **modelType** 、**numPeriods**  そして**PredictionInterval**  くらいを指定してあげれば大丈夫です。 



このOptionsに指定する項目に関する記述が、エディタの説明やAnalytics Cloudの製品ドキュメントには詳しく記載されていないので、何を指定すればわからないのが困りものです。オンプレミス版の製品ドキュメントの方に比較的詳しく説明されているので、そちらの[時系列関数の章](https://docs.oracle.com/cd/E72987_01/biee/BIEUG/appsql.htm#CHEBGHCD)を見ていただく事をお勧めします。



今回は、

- ARIMAモデルを使って予測を行う
- 予測期間は12か月
- 信頼区間は95%

ということで、計算式は下記の通りになります



```
Forecast( 数量, 'forecaast','modelType=ARIMA;numPeriods=12;PredictionInterval=95;')
```



# 予測カラム(項目）を活用したビジュアライズ



”マイ計算”で作成した、計算項目を使ってビジュアライズ（例えば表）を作成すると、このように月次の予測値をグラフ形式でもビジュアライズできますし、表形式でデータとしても出力することが出来ます。

![002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/5725f298-063b-155a-6d18-fd9bbd4eab25.jpeg)



# おまけ

予測(Forecaast)関数の**output_column_name**には、予測シナリオとしては三つのオプションがありました。有効な値は、

-“forecast” :* 標準的な予測結果の出力

-‘low’ :予測の下限値を出力

-’high’ :予測の上限値を出力

です。せっかくなので同じ要領で、マイ計算を使って予測の上限値についても計算項目を作成してみましょう



数量(予測：楽観シナリオ)

```
Forecast( 数量, 'high','modelType=ARIMA;numPeriods=12;PredictionInterval=95;')
```

![003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/fa6ab5ed-c23a-22d2-2bae-69ecd657913c.jpeg)


標準的なシナリオと楽観的なシナリオ、複数のシナリオを並べてビジュアライズしてみましょう。[ビジュアライゼーションの拡張分析機能を使った予測](https://qiita.com/Nakayamasan/items/286ca68d4855bf089c25)では、複数シナリオを並べて比較検証することは出来なかったので、これは非常に便利ですね
![004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/24551df8-5ea0-900f-de44-5d608dd38878.jpeg)




# まとめ

- 予測(Forecast)関数を使って、より細かいパラメタを指定しながら予測分析をおこなうことが出来る

- 予測結果を予測の結果をビジュアライズするだけでなく数値データとして明示的に出力できるので、業務に活かしていく場合には予測関数を使うケースが増えそう