【Pythonで株価予測】アップル(Apple)の今後の株価は? (複数期間で検証)

プログラミング
スポンサーリンク

Pythonを用いた株価予測を行って特定銘柄の株価推移を予想したい。金利上昇によって米国株が下落しているけど、S&P500を牽引しているアップルの今後の株価を知りたい。

こんな悩みにお答えします。

Pythonでは簡単に株価の予測を行うことができます。

なぜなら、Pythonには豊富なライブラリが用意されており、数行程度のコーディングで実装することができるからです。

今回は、Pythonを用いてアップルの今後の株価を予測する方法をご紹介します。

この記事を読み終えると、アップル株の今後の動きを統計的に判断することができ、売買の参考にすることができます。

 

 

本記事の内容

・アップル株の概要と今後の展望
・株価データの取得方法
・Prophetで株価予測を行う方法
・予測結果の評価方法

 

 

Pythonを学べるおすすめのプログラミングスクール
1. Aidemy
・・・AIエンジニアとしてのスキルを身に付けたい。その延長で就職、転職できたら嬉しい方におすすめ。
2.侍エンジニア塾
・・・基礎力と即戦力を身に付けられる、満足度No.1スクール
3.
TechAcademy
・・・副業に向けてスキルアップしたい。フリーランスなどを目指している方向け。
4
. AIジョブカレッジ
・・・コスパ良く、質の高い講座を受けたい方におすすめ。

本記事の信頼性

ひよこ
ひよこ

私は、大学時代にプログラミングを学び、PHPなどのWeb系言語からAIに用いられるPythonまで幅広く経験してきました。

現在はデータサイエンティストとして大企業で活動しています。

また今ではほぼ不労所得として月10万円以上の収益を継続的に達成しています。

 

1. 結論:アップル株は横ばい傾向が続く⁉

Pythonによるアップル株の株価予測結果と市場予想から以下の推測を立てます。

・直近2ヶ月間は横ばいに推移する可能性がある
・来年2023年以降は株価回復もあり得る

 

大幅な利上げの決定から株価が下落する可能性を含みつつも、直近では120~150ドル程度のレンジで推移するとの予測結果でした。

そして大手銀行によるレポートでは、景気回復から2022年度末には株価回復の可能性も示唆されています。

また別記事では、アップル株の目標価格は200ドルとの見方もあり、この先1~2年をかけ上昇していくことも多いにあり得るでしょう。

Access to this page has been denied.

LINE証券口座開設

 

2. アップル(Apple)概要

 

アップル(Apple Inc)は、スマートフォン、パソコン、タブレット、ウェアラブル、アクセサリーの設計・製造・販売及び関連するサービスの販売を行っている米国を代表する企業。

iPhoneを主力とし、米国を中心に欧州・アジアを含む世界各国で多くの売上を上げています。2022年現在増収増益傾向にあり、不安視される米国市場においても比較的堅調な推移を見せています。

主力商品であるiPhoneをはじめ、Apple WatchやAir Podsなどのウェアラブル・アクセサリも好調です。

 

2022年6月17日現在のアップルの企業概要は以下のとおりです。

企業名Apple Inc.
業種電話 & 携帯端末
時価総額(百万USD)2,191,959.00
売上高(百万USD)365,817.00
配当利回り0.6793 %
公式HPhttps://www.apple.com/

 

アップル株は堅調に推移していることが分かります。ここ10年近くは米国株にとって良い時期であったため、今後どう動くかが一つポイントになってきます。

 

SBI証券[旧イー・トレード証券]

 

 

3. 株価予測

それではここから、PythonのProphetというライブラリを用いてアップル株の株価を予測していきます。

>>【Python】Prophetを用いて株価を予測する方法(初心者向け)
>>【Python】株価と金利の相関関係を可視化する方法

a. 実験設定

対象アップル(AAPL)
期間2016/1/1~2022/6/17(取得期間)
2016/1/1~テストデータの前月(学習)
2020年以降の1ヶ月間(テスト)
モデルProphet(株価対数)
パラメータchangepoints:2019年以降のFOMC翌日
評価指標RMSLE (Root Mean Squared Logarithmic Error)
Prophetの予測範囲の中に実測値が含まれているデータ数

テストデータとしては、2020年1月から2022年5月まで1ヶ月ごとにずらして実験を行います。テストデータに合わせて、2016年からテストデータの前月までを学習データとします。

モデルはProphetを採用し、株価の対数を予測値とします。

changepoints(変化点)として2019年以降のFOMCを考慮し、株価が動くポイントとして反映しています。

 

b. 実験結果

 

・正解率は約60%
トレンドに乗っている時横ばいに推移している時は追従できている
コロナショックなどの株価の急変決算結果による変動を捉えられていない
FOMCの中でも選別が必要
・決算日やコロナショックなどの大きな転換点を考慮するべき

 

実験結果は以下のとおり。ここでは全実験を載せず、標準偏差を出したRMSLEと予測範囲内に正解データが入っている確率を記載しています。

予測時期RMSLE予測範囲内のデータ数/総データ数
2020年01月~2022年05月0.1102±0.0784375/629(59.6%)

RMSLEの値からは一概に言えませんが、正解率は約60%と悪くはないものの決して高いとは言えない結果でした。やはりFOMCだけを考慮したモデルでは個別銘柄の予測は難しいことが分かります。

 

上図では、予測範囲内に半数以上データが入っていた期間を赤枠半数未満の期間を青枠で示しています。

トレンドに乗っている時や横ばいに推移している時は追従できていることが確認できます。一方で、コロナショックなどの株価の急変や決算結果による変動を捉えられていません

今回、FOMCの日程を転換点として考慮しましたが、アップルには影響の少ないFOMCも多かったはず。したがって、FOMCの中でも選別が必要と考えられます。

また、個別銘柄の予測にあたっては、決算日やコロナショックなどの大きな転換点を考慮するべきでしょう。

 

c. サンプルコード

サンプルコードは以下のとおりです。日時を変更しながら実験を行いました。

import pandas as pd
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import numpy as np
from fbprophet import Prophet
from sklearn.metrics import mean_squared_log_error

################################################################
st = '2016/01/01'
ed = '2022/06/17'
st_train = '2016/01/01'
ed_train = '2022/04/30'
st_test = ed_train
ed_test = '2022/05/31'
period = 61 #予測日数
y_type =1 #0:オリジナルの株価、1:対数株価
changepoint_flag = 0 #0:changepointを考慮しない、1:FOMCの翌日
fomc_list = ['2019-01-31','2019-03-21','2019-05-02','2019-06-20',
             '2019-08-01','2019-09-19','2019-11-01','2019-12-12',
             '2020-01-30','2020-03-19','2020-04-30','2020-06-11',
             '2020-07-30','2020-09-17','2020-11-06','2020-12-17',
             '2021-01-28','2021-03-18', '2021-04-29','2021-06-17',
             '2021-07-29','2021-09-23','2021-11-04','2021-12-16',
             '2022-01-27','2022-03-17','2022-05-05']
################################################################

main_target = 'AAPL'
lst1= ['AAPL']
stooq = web.DataReader(lst1, 'yahoo',start=st,end=ed)

df = stooq[st_train:ed_train]

#①株価 or ②③株価の対数
if y_type == 1:
   df = df.dropna(how='any')
   df['Adj Close'] = np.log(df['Adj Close'])
   df = df.reset_index()
   df[['ds','y']] = df[['Date' ,'Adj Close']]
   df = df[['ds','y']]
else:
   df = df.reset_index()
   df[['ds','y']] = df[['Date' ,'Adj Close']]
   df = df[['ds','y']]

df_actual = stooq[st_test:ed_test]
if y_type == 1:
   df_actual = df_actual.dropna(how='any')
   df_actual['Adj Close'] = np.log(df_actual['Adj Close'])
df_actual = df_actual.reset_index()
df_actual[['ds','y']] = df_actual[['Date' ,'Adj Close']]
df_actual = df_actual[['ds','y']]


if y_type == 1:
   stooq = stooq.dropna(how='any')
   stooq['Adj Close'] = np.log(stooq['Adj Close'])
stooq = stooq.reset_index()
stooq[['ds','y']] = stooq[['Date' ,'Adj Close']]
stooq = stooq[['ds','y']]


#FOMC日程考慮
if changepoint_flag==0:
   m = Prophet(weekly_seasonality=True)
elif changepoint_flag==1:
   m = Prophet(weekly_seasonality=True,changepoints=fomc_list)


#モデル学習+予測
m.fit(df)
future = m.make_future_dataframe(periods=period)
forecast = m.predict(future)
plt.rcParams["font.size"] = "25"
fig, ax = plt.subplots(figsize=(20,10))
pd.plotting.register_matplotlib_converters()
m.plot(forecast,ax=ax);
ax.plot(stooq["ds"],stooq["y"],color="r")
plt.rcParams["font.size"] = "13.3"
ax.set_title(str(main_target))
m.plot_components(forecast);

stooq.columns = stooq.columns.droplevel(1)
ans = pd.merge(forecast, stooq, on="ds", how='inner')
ans.set_index("ds",inplace=True)

y_pred = ans[st_test:ed_test]["yhat"]
y_true = ans[st_test:ed_test]["y"]

if y_type == 1:
   y_pred = np.exp(y_pred)
   y_true = np.exp(y_true)

#評価指標1:RMSLE
RMSLE=np.sqrt(mean_squared_log_error (y_true, y_pred))
print("RMSLE:",RMSLE)

y_pred_lower = ans[st_test:ed_test]["yhat_lower"]
y_pred_upper = ans[st_test:ed_test]["yhat_upper"]
ans_judge = ans[st_test:ed_test].copy()


if y_type == 1:
   y_pred_lower = np.exp(y_pred_lower)
   y_pred_upper = np.exp(y_pred_upper)


#評価指標2
cnt = 0
for i in ans_judge.index:
   if y_pred_lower[str(i)] <= y_true[str(i)] <= y_pred_upper[str(i)]:
      cnt += 1
print("予測数:",len(ans_judge.index),"範囲内:",cnt)

 

4. 今後の展望

それでは今後のアップル株はどうなるでしょうか。

 

■アップル株の今後の動き
・2022年7~8月:下落懸念が大きくも横ばいを維持。120ドル半ばが下限になるか

・2023年3月:上手く回復の波に乗れれば、150ドルまでの回復もあり得る

 

a. 2022年7~8月の株価は?

まずは今回作成したモデルを用いて、この先2ヶ月間のアップルの株価を予測してみます。

結果は上図のとおり(縦軸は株価の対数になっています)。赤線が実際のアップル株価で、青線が株価予測値(薄い青色のエリアが予測範囲)です。

これを見るとアップル株は今後2ヶ月間横ばいに推移すると考えられます。

 

また、気になる予測範囲は

  • 最小値:126.6 ドル
  • 最大値:167.3 ドル

とのこと。

ひよこ
ひよこ

執筆時点のアップル株価が130ドル程度なので、そろそろ下限ということですね。。

今回は株価の堅調な維持が予想されましたが、米国株全体として好調であった時期を対象として学習し予測しているため、大きく外れる可能性も十分にありますのでご注意ください。

この結果については、この先2ヶ月間で答え合わせをしてみてください。

 

b. 2022年度末の株価は?

それでは、2022年下期以降の株価の動きを予想していきましょう。ここではマクロな視点から考えていきます。

2022年6月のFOMCにて政策金利政策に大きな動きがありました。

米連邦準備理事会(FRB)は15日の米連邦公開市場委員会(FOMC)で通常の3倍となる0.75%の利上げを決めた。上げ幅は1994年11月以来、27年7カ月ぶりの大きさ。金融緩和の縮小を始めてからもインフレの加速がとまらず、事前に示唆した利上げペースを上回る強硬策に出た。

FRB、0.75%利上げ決定 インフレ抑制へ27年ぶり上げ幅
【ワシントン=高見浩輔】米連邦準備理事会(FRB)は15日の米連邦公開市場委員会(FOMC)で通常の3倍となる0.75%の利上げを決めた。上げ幅は1994年11月以来、27年7カ月ぶりの大きさ。金融緩和の縮小を始めてからもインフレの加速がとまらず、事前に示唆した利上げペースを上回る強硬策に出た。短期金利の指標であるフェ...

 

これを受け、米国株は一段と下落しており、今後も株価下振れを警戒していく必要があるでしょう。

 

 

一方で三菱UFJ信託銀行では、景気回復と共に増益基調は継続すると見られ、22年度末(2023年3月)には株価の回復が見込まれると想定されています。

S&P500の値動き想定は以下のとおりで、1.1~1.2倍程度に上昇することになります。

  • 2022年9月:4,500ドル
  • 2023年3月:4,750ドル

 

この予想に則ると、米国で最も時価総額が高くS&P500を牽引しているアップル株も140~150ドル程度まで押し上げても違和感はないでしょう。

 

\毎月の収支レポートと市場動向はこちら/

 

5. まとめ

今回は、Pythonを用いてアップルの今後の株価を予測する方法をご紹介しました。

・2022年7~8月:下落懸念が大きくも横ばいを維持。120ドル半ばが下限になるか
・2023年3月:上手く回復の波に乗れれば、150ドルまでの回復もあり得る

という結果でした。

ただ、予測モデルの精度はまだ改善の余地がありますし、FRBの金利政策に影響を受けやすい中で不安定な時期が続くことは間違いありません。

したがって、RSIやPERの値にも注目しつつ、あなた自身のタイミングで購入を検討してみてはいかがでしょうか。

 

 

 

本ブログでは、株式やプログラミングに関する記事を投稿しています。

プログラミング(Python)を学びたい方におすすめの書籍やプログラミングスクール、おすすめの学習方法などをご紹介しておりますのでぜひご覧ください。

独学で挫折してしまう方は、プログラミングスクールという方法がおすすめです。

私の一押しは『TechAcademy』です。

質問することですぐに分からないところをクリアにできますし、進捗をサポートしてくれるため確実に成長することができます。

無料相談を実施しているため、まずは話を聞いてあなたのスタイルに合っているかどうか確認してみるのが良いと思います。

スキルアップを目指したい方におすすめのオンライン学習サービス

コメント

タイトルとURLをコピーしました