見出し画像

量子コンピューターで機械学習を学ぼう!「QC4U2」に参加してみた-第5回目-


こんにちは、デザイナーのヤマモモです!🙇‍♂️
今日も引き続き、大関さんが量子コンピューターを無料で教えてくれるというオンライン講座の第5回目のレポートを書きます😄

↑前回の記事

会員登録してない人でもこの動画視聴できますので、是非御覧ください!


今回はIBMとGoogleの株価の終値から上がるか下がるか金融予測するモデルを作るそうです。
やっほーーー!お金!お金!テンション上がるぅ!🤩

視聴する前のヤマモモの心情

と思って、まず1回流し見しました。
視聴後、ヤマモモはパソコンをそっと閉じました…( ˘ω˘)スヤァ

今回めちゃ難しいの…過去最高難易度です!😭
QC4U2の企画編のグループワーク(もう始まってるんだよー😱)もありましたが、今回の記事書ける気がしなくてw(実際、中途半端な記事です)
かなり4回目から時間が経ってしまいました…(´;ω;`)

データの準備

株価のデータを取得する

いつも通りPenny Laneを導入します。
その後にヤフーファイナンスからIBMとGoogleのデータを取得します💰

ヤフーファイナンスからデータ取ってくるよ

この先「なんとか1」と「なんとか2」はいっぱい出てくるので、ちゃんと覚えて置かないと詰みますw

df1の中身はこんな感じ

実際にdf1を見てみるとIBMの株価の高値やら底値など色々な情報が見れました👀

#↓IBMとGoogleのデータを入れる空リスト
cdata1 = []
cdata2 = []

#↓IBMとGoogleの予言用空リスト
cdata_ref1 = []
cdata_ref2 = []

#終値だけ取得
for i in df1['Close']:
    cdata1.append(i)
for i in df2['Close']:
    cdata2.append(i)

for i in df_ref1['Close']:
    cdata_ref1.append(i)
for i in df_ref2['Close']:
    cdata_ref2.append(i)

cdata1(IBM用)とcdata2(Google用)の空リストを用意して各々の終値だけを格納します。
それとは別に予言用データというのも用意します。

実際にcdataの中を見ると終値が格納されています
data1 = []
data2 = []

for i in range(len(cdata1)):
    data1.append(cdata1[i])
    data2.append(cdata2[i])
for i in range(30):
    data1.append(cdata_ref1[i])
    data2.append(cdata_ref2[i])

IBMとGoogleのcdata(全期間と予言用)をdataにまとめます。

対数を取る

diff_log1 = np.log(data1)
diff_log2 = np.log(data2)
diff_series1 = np.diff(diff_log1)
diff_series2 = np.diff(diff_log2)

dataの対数を取ります。対数ってなんだ…?🤔
という事で、df_log1 を見ると…

df_log1の中身
目がー目がーーー!(数字の羅列に目をやられる大佐)

ここで言う対数を取るとは…株価と大小関係は変わらないけど「小さめの数字に圧縮するイメージ」だそうです!
なるほど…?🤨

差分を取る

対数を取って数字を小さめにした後、差分を取ります。差分ってなんだ…🤔
という事で、diff_searies1 を見ると…

diff_searies1の中身
目がー目がぁぁーーー!(再び数字の羅列に目をやられる大佐)

diff_seriesというのは、この数字のお隣同士の引き算をやると「前の時刻」から「次の時刻」で上がったのか、下がったのかということを調べられるそうです。
この数字がわかると、上がったとか下がったとかのトレンドを見ることができるんだって!!(よくわかんないけど、そういう事ですw)

・cdata=各々の終値が入ってる
・data=cdata(期間の終値のデータと、予言用30個分のデータ)
・diff_series=data1(IBM)、data2(Google)ログを取って差分を取ったもの=の数字があると上がったとか下がったとかのトレンドを見ることができる

わかんなくなったので自分用メモ

この変動をグラフにするとこんな感じです↓

株価じゃないよ!上がったか、下がったかの変動のグラフです!

今回は株価がいくらになるという予測するのではなく、上がるか・下がるかの変動を予測する事が目的です✨
この後は、どれくらい上がるか・下がるのかっていう変動大きさも重要になるんで、そういうところを予測しようとしています👀

パーテーションを作る

わかる部分だけ書いてみた!
  • par=パーテーションの意味。今回は上がるか下がるかの2段階なので2。4段階(上がる・ちょっと上がる・下がる・ちょっと下がる)とか2の累乗で増やすことも設定可能。上げると精度が高くなるけど、必要な量子ビットが増えるから計算時間かかるよ💦

  • 仕切り版を作っている関数にある[50]という数字は、今回par=2で区切っているので、50%(半分)の部分で区切るよと言っている。もっと細かくしたい場合は[25.50.75]などと区切れる

実際に線を引くとこんな感じ

これで最大値・中心・最小値で仕切りができました!✨
中心から下に行けば0(下がっている)、上にいけば1(上がっている)とカウントできるようになります。

これによって、第4回の識別の話しのようにこのデータを与えれば次はどうなりますか?と予測ができるように量子コンピュータくんが扱いやすいデータになったという事です💪(´・_・`💪)

dis_timeの中身

この仕切りデータを用いて、Y(実際に変動するデータ)を入れたらどっちに分類するの?という関数を作ります。略(2:17:17
そうすると↑こんな感じで0(下がる)・1(上がる)が表現できるようになりました!

確率行列を作る

今までのデータを利用して確率行列というものを作ります!
同じような名称多くてわからん😂

確率行列とは?
今から株価が下がった後上がるのは60%でしょう、下がったら下がり続けるのは40%でしょう。といったように,そういった数字を並べるものを確率行列と呼ぶ。

by大関さん
こんな感じで2×2の行列ができるよ(ピンク枠の部分)

確率行列を使って、上がって下がるのか、上がってさらに上がり続けるのか?どうなるの?という事を調べます

結果

こんな感じで移り変わる確率を遷移(確率)行列というそうです。
この遷移行列は、IBMとGoogleの1年間のトレンドからどう変化するかの履歴を全て持ってます。
この行列を何回も何回も加算することによって色々な状態変化を見ることができる…さらにこの先上がるか、下がるかを調べることができるようになるそうで…?🫠

ヤマモモの心境

正直に書くと、ここらへんから良くわかんなくなっちゃって😂
この後 量子回路に今までのデータを入れるんですが、1つつまずくとその後もわからない状態😭
わからない状態で書いても良くないから今回はここでギブアップします…💦さーせん!🥺

感想

やっぱり金融って難しい🤯
これって論文を元にやってるらしいんですが、それをまとめるなんて無理だよーーー😭

でもちょっとした気付きがあって…ヤマモモは前職金融系だったんですが、平均値を求める部分(線を引く所)が当時学んだボリンジャーバンドを思い出しました。
1σ、2σ…と+から-まで線があるんですが、株価のxx%はこの線を超えないだろうみたいな金融指標ですね。それに似てるなーって。
やっぱり数学的な考えからこういう指標って出来てるんだろうなって、ちょっとした気付きでした😊

はい!これで講義編は全部終わり!🙌
こんな中途半端な記事読んでくださり、ありがとうございました。
この5回目だけ最後まで書ききれなかったのが悔しいですが…

悔しいです!!🥶

でも企画編も始まってるので気持ち切り替えてそちらに集中します!
5月以降それの記事も書きたいな!😊

あと今回初めて量子コンピュータというものに触れて、気付いた事もあるのでいつか量子コンピュータのまとめ記事も書きたい。
色々目標ができた講義でした…!✨大関さん講義お疲れ様でした🙇‍♀️🙇‍♀️
数学わかんない人間がここまで頑張れたのも大関さんのお陰です🙏
ありがとうございました!😆

この記事が気に入ったらサポートをしてみませんか?