前回の Azureリレーは「ビデオチャットを自作するならAzure Communication Service!!検討中なあなたに伝えたいこと4つ!! #Azure リレー」でした。是非こちらもご覧ください。
はじめに
先日、弊社会長の唐突な発案で、本テックブログのPV数予想大会が開催されました。
ちょうどその日、DA-100 (Analyzing Data with Microsoft Power BI)を受けていた私。良い機会なのでPower BIの時系列予測はどないなもんやと気になり、触ってみることにしました。また、その中で少しつまづいたポイントもあったのでまとめて紹介したいと思います。最後に少しだけ予測精度の試算も出してみます。
準備
とは言ったものの、Macユーザの私。ご存知の方も多いかと思いますが、Power BIを使う方法はいくつかあるのですが、Windows上で動作するのが基本です。
Azure にインストール済みの仮想マシンがあればなぁと「power bi on azure vm」なんて検索してみるとこんな記事を見つけました。
AzureにPower BI Report Serverがインストール済みの仮想マシンがあるとのことなので、この記事に従って環境を準備します。(※ここからは仮想マシンを立てていくので、料金が発生します)
Azureのサブスクリプションがない方は、アカウントの作成をします。
まず、AzureポータルのMarketplaceで「Power BI Report Server」と検索し、[作成]をクリックします。

[基本]と[Settings]で仮想マシンとストレージアカウントの設定をします。(User nameとPasswordはメモしておきます)


[Settings]ではデフォルトで4vcpuのStandard DS12 v2というVMサイズが選択されていると思いますが、もう少しだけスペックと料金を抑えるなら、Standard DS11 v2という一つ下のサイズもあります。今回は最低限のスペックで問題ないと思うので、こちらで作成します。

[確認および作成]をクリックすると…(エラーどんっ)

[基本]で設定した名前に引っ張られてストレージアカウントを作成しようとして、既にその名前は取られていると言われたので名前を変えます。(SQL StorageとDiagnostics Storageももちろん違う名前にします)
検証に成功したので、気を取り直して…リソースを作成!

(50分くらい待機…)
仮想マシンにはリモートデスクトップで接続します。使用するアプリはこちらの記事でも紹介されている「Microsoft Remote Desktop」です。持っていない方はリソースができるのを待っている間にインストールしておくといいでしょう。

リソースができたらアプリを起動してPCを追加し、接続します。

Power BI Desktopが使えるようになりました🎉

予測
環境が整ったところでPV数予測をさせたいと思います。(以下、具体的な数字は隠しています)
今回使用したデータは、日付とPV数の列を持つ以下のようなcsvファイルです。2021/11/23〜2021/12/22のデイリーPV数を元データに、12月の残りの日のPV数を予測させました。Excelファイルなどでも手順はそれほど変わらないと思います。
datetime, pv
2021/11/23, xxx
2021/11/24, yyy
.
.
.
2021/12/22, zzz
ここからどんどん進めていきます。
テキストエディタなどでcsvファイルを作成し…

Power BI Desktopを起動して、[Get Data] > [Text/CSV] からデスクトップに先ほど作成したcsvを選択し、データをLoad(インポート)します。

ちなみに、データのインポートでエラーが出たときは、管理者としてアプリを開くことで解決することがあります。(参考記事。つまづきポイントその1)
成功するとModelブレードなどでcsvファイルのデータが追加されているのを確認できるので、

ReportブレードでLine chart(折れ線グラフ)を追加し、Axis(横軸)にdatetimeを、Values(縦軸)にpvをドラッグアンドドロップで設定して、時系列データを折れ線グラフで表示させます。

するとおそらく思っていたのと違う点が1つだけプロットされたものが出ると思います…(つまづきポイントその2)

ここで、datetimeのプルダウンでDate Hierarchyにチェックがついているところをdatetimeに変えてあげると、思い描いていたような時系列の折れ線グラフが表示されると思います。

それでは最後に、本題の予測を表示させましょう。虫眼鏡の形をした[Analytics]タブの一番下にある[Forecast]プルダウンを展開すると[+ Add]とあるので素直にこれを選択しましょう。するとどうでしょう。もうできちゃいました!

デフォルトでは10日先までの95%信頼区間予測値、下限、上限を表示してくれます。色々調整は可能ですが、今回はデフォルトで設定されているパラメータで出された12/23〜12/31の予測値の合計PV数と実際の12/23〜12/31の合計PV数を比較して、下で定義する誤差で精度の試算を出してみます。
MathJax.Hub.Config({ tex2jax: { inlineMath: [['$', '$'] ], displayMath: [ ['$$','$$'], ["\\[","\\]"] ] } }); $$ 誤差[\%]= \frac{|(実際のPV数)-(予測PV数)|}{実際のPV数}\times100 $$早速結果ですが、誤差は少数第三位で四捨五入して55.43[%]でした。大外ししていますね…(笑)今回は年末というイレギュラーな(PVが下がりやすい)時期でもあったので仕方がありません。これはPower BIの時系列予測の精度が低いというよりは、使うタイミングが悪かったとみるのが妥当でしょう。
ちなみに、もし仕事納めを迎えるであろう12/27以降は予測範囲の下限付近を推移すると考えて12/23〜12/26は予測値、12/27〜12/31を下限値で同様に計算すると、誤差は9.99[%]でした。これならボチボチといったところでしょうか。
(こちらはあくまでも結果を知ってから精度が高くなりそうな組み合わせを試しているだけなので、ほとんど当てにならないお遊びだと思ってください)
まとめ
この記事ではPower BIで時系列データの予測をしました。MacユーザでもPower BIがインストール済みのAzure VMを立てるだけですぐに使えて非常にお手軽でした。
今回のポイントは
- AzureのMarketplaceは便利
- Power BIの時系列予測は(少しつまづいたけど)簡単
- 時系列予測は使いどころを見極めましょう
の3点です。
ちなみに、要した時間は2時間弱(ほとんどリソースの作成と元データの準備)、料金はちゃちゃっと作って消せば百円もしません。終わったらリソースは忘れずに消しておきましょう。
お疲れ様でした。