そうだ!機械学習を使用してビリビリの株価動向を予測する

そうだ!機械学習を使用してビリビリの株価動向を予測する

[[419019]]

この記事では、主にPythonを使用してビリビリの株価を分析する方法について説明します。株価データの基礎分析を行い、matplotlib描画ライブラリと組み合わせて視覚化し、機械学習手法であるモンテカルロシミュレーションを使用して、今後1年間の株価動向を予測します。

インストール

numpy、pandas、matplotlib、scipy などの Python データ サイエンス ツールキットをインストールする必要があります。

  1. #公式アカウントをフォロー: Kuankebang、「ソースコード」と返信すると、この記事の完全なソースコードをダウンロードできます。  
  2. numpyをnpとしてインポートする 
  3. pandasをpdとしてインポートする 
  4. 数学からインポートsqrt  
  5. matplotlib.pyplot を plt としてインポートします。  
  6. scipy.statsからnormをインポート 
  7. pandas_datareaderからデータをインポートする

分析対象は、2018年の上場から2021年現在までのビリビリ(銘柄コード:BILI)のデータです。データはYahooから提供されています。ここでは、pd.to_datetime を使用して、データ セットの時間を時系列に変換し、株価分析を容易にしています。

  1. BILI =データ.DataReader('BILI', 'yahoo',開始= '29/3/2018' ,)  
  2. BILI.index = pd .to_datetime(BILI.index)

まず、head() メソッドを使用して、データ セットの構造を確認します。データ セットには、株式の始値、終値、1 日の最小値と最大値、取引量などの情報が含まれています。この記事の下部にある QR コードをスキャンして、完全なソース コードと Jupyter Notebook ファイルをダウンロードしてください。

始値トレンド

matplotlib を使用してデータを視覚化できます。plt.legend は画像の凡例を設定するために使用されます。loc は凡例の位置です。upper right は凡例が右上隅にあることを意味します。チャートからわかるように、ビリビリ株は2020年12月から2021年2月にかけて急成長し、その後株価は下落しました。

  1. plt.figure(図サイズ=(16,6))  
  2. BILI['開く'].plot()  
  3. plt.legend(['BILI'], loc = '右上' )

株式取引量

株の取引量を見てみましょう。

  1. plt.figure(図サイズ=(16,6))  
  2. BILI['ボリューム'].plot()  
  3. plt.legend(['BILI'], loc = '右上' )  
  4. plt.xlim(BILI.インデックス[0],BILI.インデックス[-1])

株式総取引量

以下の銘柄の総取引量を分析してみましょう。グラフを見ると、2021年1月から5月までのある日の総取引額が過去最高を記録したことが一目瞭然です。

  1. BILI['総取引量']=BILI['オープン']*BILI['取引量']  
  2. plt.figure(図サイズ=(16,6))  
  3. BILI['合計取引'].plot()  
  4. plt.legend(['BILI'], loc = '右上' )  
  5. plt.xlim(BILI.インデックス[0],BILI.インデックス[-1])

次に、argmax() を使用して、取引金額が最大となる日付を取得します。

  1. BILI['合計取引'].argmax()

出力は次のようになります。

タイムスタンプ('2021-02-25 00:00:00')

ニュースを調べたところ、2021年2月25日に、ビリビリ(NASDAQ: BILI)が2020年12月31日までの第4四半期および通期の監査対象外財務報告書を発表したことがわかりました。財務報告が発表された後、ビリビリの米国株式市場での株価は時間外取引で5%以上上昇した。

終値とその移動平均

BILI 株の終値とその移動平均が以下にプロットされています。移動平均を取得するには、DataFrame の rolling() 関数を使用できます。

  1. BILI['閉じる'].plot(図サイズ=(16,6), xlim =(BILI.index[0],BILI.index[-1]))  
  2. BILI['Close'].rolling(50).mean().plot( label = 'BILI MA50' )  
  3. BILI['Close'].rolling(200).mean().plot( label = 'BILI MA200' )  
  4. plt.凡例()

株式の利益率

以下では、各株の日次リターンを計算し、ヒストグラムで表示します。日次収益率を計算する方法は3つあります。1つ目は計算式を直接使う方法、2つ目は金融分野専用のサードパーティライブラリのffn.to_returns関数をインポートする方法、3つ目はpandasが提供するpct_change(1)関数を使って計算する方法です。この記事の下部にある QR コードをスキャンして、完全なソース コードと Jupyter Notebook ファイルをダウンロードしてください。

  1. #公式アカウントをフォロー:Kuankebang、「ソースコード」と返信すると完全なソースコードが取得でき、計算式を直接使用できます 
  2. BILI['戻る']=(BILI['閉じる']-BILI['閉じる'].shift(1))/BILI['閉じる'].shift(1)  
  3. BILI BILI = BILI.dropna()  
  4. #金融分野専用のサードパーティライブラリをインポートするffn.to_returns関数の計算 
  5. ffnをインポートする 
  6. BILI['戻る']=ffn.to_returns(BILI['閉じる'])  
  7. #計算にはpandasの独自の関数pct_change(1)を使用する 
  8. BILI['戻る']=BILI['閉じる'].pct_change()
  9. BILI BILI = BILI.dropna()  
  10. #公式アカウントをフォロー: Kuankebang、「ソースコード」と返信すると、この記事の完全なソースコードをダウンロードできます。  
  11. plt.hist(BILI['Return'],ビン= 50 )

箱ひげ図を使って収益率を観察することもできる

  1. box_df = pd .concat([BILI['Return']], axis = 1 )  
  2. box_df.columns = ['BILIリターンズ']
  3. box_df.plot(種類= 'box' 図サイズ=(8,11)、カラーマップ= 'jet' )

株式の累積収益をプロットする

  1. BILI['累積リターン']=(1+BILI['リターン']).cumprod()  
  2. BILI['累積リターン'].plot( label = 'BILI' , figsize =(16,8), title = '累積リターン' )  
  3. plt.凡例()

株式の年間複利成長率と収益の年間変動率

株式の年間複利成長率と収益の年間変動率を計算します。

  1. #公式アカウントをフォロー: Quantcom、「ソースコード」と返信すると完全なソースコードが取得でき、複合年間成長率を計算できます 
  2. 日数= (BILI.index[-1] - BILI.index[0]).日数 
  3. cagr = ((((BILI['Adj Close'][-1]) / BILI['Adj Close'][1])) ** (365.0/日)) - 1  
  4. 印刷 (' CAGR =',str(round(cagr)*100)+"%")  
  5. ミュー= cagr    
  6. #リターンの年間変動率を計算する 
  7. BILI['リターン'] = BILI['調整終値'].pct_change()  
  8. vol = BILI ['戻り値']*sqrt(252)  
  9. print ("年間ボラティリティ= ",str(round(vol,4)*100)+" %")

CAGR = 71.72%年間変動率 = 65.14%

モンテカルロシミュレーションを使用した株価動向の予測

正規分布に従う毎日の収益のランダム抽出に基づいて、次の取引年 (252 日間) の基礎価格シリーズの進化の単一のシミュレーションを予測してみましょう。最初のグラフに示されている単一の線シリーズによって表されます。 2 番目のグラフは、1 年間にわたるこれらのランダムな毎日のリターンのヒストグラムをプロットします。この記事の下部にある QR コードをスキャンして、完全なソース コードと Jupyter Notebook ファイルをダウンロードしてください。

  1. S = BILI ['Adj Close'][-1] #開始株価(つまり最終日の実際の株価)  
  2. T = 252 #取引日数 
  3. mu = 0.7172 #年平均成長率 
  4. vol = 0.6514 #年間ボラティリティ 
  5. #公式アカウントをフォロー: Quantcom、「ソースコード」と返信して完全なソースコードを取得し、ランダム正規分布を使用して毎日の収入リストを作成します 
  6. daily_returns = np .random.normal((mu/T),vol/math.sqrt(T))+1  
  7. #公式アカウントをフォロー: Kuankebang、「ソースコード」と返信すると、この記事の完全なソースコードをダウンロードできます。  
  8. 価格表= [S]  
  9. daily_returns の x について:  
  10. 価格リスト.append(価格リスト[-1]*x)  
  11. #価格系列の折れ線グラフを生成する 
  12. plt.plot(価格リスト)  
  13. plt.show()

日次収益のヒストグラムを生成する

  1. plt.hist(毎日の戻り値-1, 100)  
  2. plt.show()

ビリビリ株価の今後の動向を予測する1,000回のシミュレーション。

  1. numpyをnpとしてインポートする 
  2. インポート数学 
  3. matplotlib.pyplot を plt としてインポートします。  
  4. scipy.statsからnormをインポート 
  5. #公式アカウントをフォロー: Kuankebang、「ソースコード」と返信すると、この記事の完全なソースコードをダウンロードできます。  
  6. S = BILI ['Adj Close'][-1] #開始株価(つまり最終日の実際の株価)  
  7. T = 252 #取引日数 
  8. mu = 0.7172 #年平均成長率 
  9. vol = 0.6514 #年間ボラティリティ 
  10. #シミュレーションの実行回数を選択します - 私は1000を選択しました 
  11. iが範囲(1000)内にある場合:  
  12. #ランダム正規分布を使用して日次リターンのリストを作成する 
  13. daily_returns = np .random.normal(mu/T,vol/math.sqrt(T))+1  
  14.   #開始価格を設定し、上記のランダムな毎日のリターンによって生成された価格リストを作成します 
  15. 価格表= [S]    
  16.   daily_returns の x について:  
  17. 価格リスト.append(価格リスト[-1]*x)  
  18. # 個々の実行からデータをプロットします。最後にプロットします 
  19. plt.plot(価格リスト)  
  20. #上記で作成した複数の価格シリーズのグラフを表示します 
  21. plt.show()

ビリビリ株価の今後の動向を予測する10,000回のシミュレーション。

  1. numpyをnpとしてインポートする
  2. インポート数学 
  3. matplotlib.pyplot を plt としてインポートします。  
  4. scipy.statsからnormをインポート 
  5. #公式アカウントをフォロー: Kuankebang、「ソースコード」と返信すると、この記事の完全なソースコードをダウンロードできます。  
  6. 結果= []  
  7. #変数を定義する 
  8. S = BILI ['Adj Close'][-1] #開始株価(つまり最終日の実際の株価)  
  9. T = 252 #取引日数 
  10. mu = 0.7172 #年平均成長率 
  11. vol = 0.6514 #年間ボラティリティ 
  12. #シミュレーションする実行回数を選択します - 10000を選択します 
  13. iが範囲(10000)内にある場合:  
  14. #ランダム正規分布を使用して日次リターンのリストを作成する 
  15. daily_returns = np .random.normal(mu/T,vol/math.sqrt(T))+1   
  16.   #開始価格を設定し、上記のランダムな毎日のリターンによって生成された価格リストを作成します 
  17. 価格表= [S]   
  18.   daily_returns の x について:  
  19. 価格リスト.append(価格リスト[-1]*x)  
  20. # 個々の実行からデータをプロットします。最後にプロットします 
  21. plt.plot(価格リスト)   
  22. #各シミュレーション実行の終了値を、最初に作成した空のリストに追加します 
  23. 結果を追加します(価格リスト[-1])  
  24. #上記で作成した複数の価格シリーズのグラフを表示します 
  25. plt.show()

複数のシミュレーション用に、株価の終値のヒストグラムを作成します。

  1. plt.hist(結果、ビン= 50 )  
  2. plt.show()

numpy の mean 関数を使用して平均の分布を計算し、「期待値」を取得します。

  1. print(round(np.mean(結果)))

139.18

NumPyの「パーセンタイル」関数を使用して5%と95%の分位数を計算する

  1. print("5%分位数=",np.percentile(result,5))  
  2. print("95%分位数=",np.percentile(result,95))

5% 分位数 = 38.33550814175252

95% 分位数 = 326.44060907630484

先ほど計算した 2 つの分位数をヒストグラムにプロットして、視覚的に表現してみましょう。

  1. plt.hist(結果、ビン= 100 )  
  2. plt.axvline(np.percentile(result,5)、= 'r' 線のスタイル= '破線' )  
  3. plt.axvline(np.percentile(result,95)、= 'r' 線のスタイル= '破線' )  
  4. plt.show()

上記の結果から、ビリビリ(BILI)の株価が最終的に 38.33 米ドルを下回る確率は 5%、326.44 米ドルを上回る確率は 5% であることがわかります。では、株価が 326.44 ドルを超えるリターンを追いかけるために、株価が 38.33 ドルを下回った場合に 5% の損失を被るリスクを負う覚悟はありますか?

<<:  アルゴリズムを拒否することができます

>>:  AIプロジェクトでKubernetesを使用する方法

ブログ    
ブログ    
ブログ    

推薦する

2019 年に人工知能がハイパフォーマンス コンピューティングに及ぼす 10 の影響

[[262566]]今日では、人工知能を使用するワークロードが普及しつつあり、その一部は世界最速のコ...

...

顔認識は普及しつつあるのに、なぜ禁止されているのでしょうか?

顔認識は誰もが知っている技術です。iPhoneのFace IDからAlipayの顔認証決済まで、かつ...

...

LiDARは自動運転以外にも様々な用途があります!

近年、スマートカーの継続的な発展に伴い、LIDARはますます注目を集めており、特にテスラと他の自動車...

...

...

新しいNeRF技術は、ビデオを簡単に制御できる3Dモデルに変換できます。

翻訳者 |ブガッティレビュー | Chonglou人間の動きが複雑で、環境によって見た目が微妙に異な...

ソートアルゴリズムのより詳細な概要

ソートアルゴリズム平均時間計算量バブルソート (n2) 選択ソート (n2) 挿入ソート (n2) ...

人工知能、機械学習、アルゴリズムが施設・資産管理に与える影響

急速に進化する今日のテクノロジーの世界では、「人工知能」、「機械学習」、「アルゴリズム」などの用語が...

世界のAIチップ投資環境が明らかに、5つのシナリオにチャンスあり

[[241691]]画像出典: Visual China AIチップ投資マップAI チップの設計は、...

...

百度が新製品「小度」を発売、マルチラウンド対話と子供向けモードを追加

昨日の午後、百度は新製品発表会で「小度」スマートスピーカーを発表しました。このスマートスピーカーは百...

...

ChatGPT 使用時に遭遇する落とし穴

最近、ChatGPT を使用しているときに小さな問題に遭遇しました。特殊な状況のため、syslog ...