嘗試不寫任何代碼完全交由chatgpt做一個股票預測模型之第一部曲

更新於 發佈於 閱讀時間約 17 分鐘
投資理財內容聲明

機器人會幫助我們獲得財務自由嗎?


毫無疑問,OpenAI 的 ChatGPT 非常出色!

我喜歡寫有關金融市場的文章,尤其是從數據科學的角度。

不用說,這個人工智能工具對我來說形成了一個很好的交集;

這能滿足我內心的書呆子,同時證明這工具對追求財務自由有價值嗎?

我問了一個非常直率的問題,直接對其進行了測試:

啊等等,我忘了我的禮貌!

好吧……很明顯,這種直接的提問是行不通的

可是等等!也許換種方式問會奏效?

如果我們要求它幫助我們編寫一些代碼來預測價格

他寫得出來嗎?

第 1 步 — 要求 ChatGPT 編寫一些代碼

首先,我讓 AI 給我寫一些代碼來預測股票價格。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima_model import ARIMA

# 导入数据
df = pd.read_csv('stock_prices.csv', parse_dates=['date'], index_col='date')
train_data = df[:'2021-09-30']
test_data = df['2021-10-01':]

# 可视化数据
plt.plot(train_data)
plt.title('Stock Prices')
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()

# 拟合ARIMA模型
model = ARIMA(train_data, order=(1,1,1))
model_fit = model.fit()

# 预测测试数据
start_date = test_data.index[0]
end_date = test_data.index[-1]
pred = model_fit.predict(start=start_date, end=end_date)

# 可视化预测结果
plt.plot(train_data, label='Training Data')
plt.plot(test_data, label='Test Data')
plt.plot(pred, label='Predicted Data')
plt.title('Stock Prices Prediction')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()

挖還不錯他還給了我一些解釋

这个示例代码导入了股票价格数据,可视化了价格趋势,并使用ARIMA模型拟合了历史数据,并进行了预测。但需要注意的是,这个模型是非常简单的,并不能做出准确的预测,因为它没有考虑到所有可能的因素和变量。

ok我貼到colab去實際執行

啊……好像我們這裡有問題。我們沒有文件 stock_prices.csv。但或許 ChatGPT 也能在這方面幫助我們? 🤔

第 2 步 — 要求 ChatGPT 修復錯誤

好的,讓我們修復錯誤。

看起來可以用來下載股票價格讓我們開始吧!

好的……讓我們要求它修復錯誤:

ok成功了

讓我們來看一下資料

既然有了資料我們再來重新執行一次第一步的代碼

ok…..看來還有些問題,我們請chatgpt幫忙修正

ok看來他知道他哪裡寫錯並給了更新後的版本

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 读取csv文件并将日期列指定为索引列
df = pd.read_csv('stock_prices.csv', parse_dates=['Date'], index_col='Date')

# 可视化股票价格时间序列数据
plt.plot(df)
plt.title('Stock Prices')
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()

# 将数据拆分为训练集和测试集
train_data = df.iloc[:-30]
test_data = df.iloc[-30:]

# 创建ARIMA模型并训练
model = ARIMA(train_data, order=(1, 1, 1))
model_fit = model.fit()

# 使用模型进行预测
predictions = model_fit.predict(start=len(train_data), end=len(df)-1, dynamic=False)

# 可视化预测结果和测试集
plt.plot(test_data.index, test_data.values, label='Actual')
plt.plot(predictions.index, predictions.values, label='Predicted')
plt.title('Stock Price Prediction')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()

實際執行:

ok寫程式嘛debug是很正常的事情,再度要求chatgpt幫忙debug

原來是因為ARIMA模型需要的是單變量時間序列數據,因此CHATGPT

知道他寫錯了重新寫了代碼給我

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 读取csv文件并将日期列指定为索引列
df = pd.read_csv('stock_prices.csv', usecols=['Date', 'Close'], parse_dates=['Date'], index_col='Date')

# 可视化股票价格时间序列数据
plt.plot(df)
plt.title('Stock Prices')
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()

# 将数据拆分为训练集和测试集
train_data = df.iloc[:-30]
test_data = df.iloc[-30:]

# 创建ARIMA模型并训练
model = ARIMA(train_data, order=(1, 1, 1))
model_fit = model.fit()

# 使用模型进行预测
predictions = model_fit.predict(start=len(train_data), end=len(df)-1, dynamic=False)

# 可视化预测结果和测试集
plt.plot(test_data.index, test_data.values, label='Actual')
plt.plot(predictions.index, predictions.values, label='Predicted')
plt.title('Stock Price Prediction')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()

OK還是有問題依樣請CHATGPT反省

OK新的修正後的代碼:

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 读取csv文件并将日期列指定为索引列
df = pd.read_csv('stock_prices.csv', usecols=['Date', 'Close'], parse_dates=['Date'], index_col='Date')

# 转换日期格式
df.index = pd.to_datetime(df.index)

# 可视化股票价格时间序列数据
plt.plot(df)
plt.title('Stock Prices')
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()

# 将数据拆分为训练集和测试集
train_data = df.iloc[:-30]
test_data = df.iloc[-30:]

# 创建ARIMA模型并训练
model = ARIMA(train_data, order=(1, 1, 1))
model_fit = model.fit()

# 使用模型进行预测
predictions = model_fit.predict(start=len(train_data), end=len(df)-1, dynamic=False)

# 可视化预测结果和测试集
plt.plot(test_data.index, test_data.values, label='Actual')
plt.plot(predictions.index, predictions.values, label='Predicted')
plt.title('Stock Price Prediction')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()

執行:

OK還是一樣我繼續追問

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 读取csv文件并将日期列指定为索引列
df = pd.read_csv('stock_prices.csv', usecols=['Date', 'Close'], parse_dates=['Date'], index_col='Date')

# 将数据拆分为训练集和测试集
train_data = df.iloc[:-30]
test_data = df.iloc[-30:]

# 创建ARIMA模型并训练
model = ARIMA(train_data, order=(1, 1, 1))
model_fit = model.fit()

# 使用模型进行预测
predictions = model_fit.predict(start=len(train_data), end=len(df)-1, dynamic=False)

# 可视化预测结果和测试集
plt.plot(test_data.index, test_data.values, label='Actual')
plt.plot(predictions.index, predictions.values, label='Predicted')
plt.title('Stock Price Prediction')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()

# 设置x轴刻度
plt.xticks(pd.date_range(test_data.index[0], test_data.index[-1], freq='W'))

plt.show()

看來他設置了x轴刻度

OK在執行看看

好這次完全沒有出現錯誤訊息不過圖片怪怪的

看看CHATGPT有沒有辦法解決

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 读取csv文件并将日期列指定为索引列
df = pd.read_csv('stock_prices.csv', usecols=['Date', 'Close'], parse_dates=['Date'], index_col='Date')

# 将数据拆分为训练集和测试集
train_data = df.iloc[:-30]
test_data = df.iloc[-30:]

# 创建ARIMA模型并训练
model = ARIMA(train_data, order=(1, 1, 1))
model_fit = model.fit()

# 使用模型进行预测
predictions = model_fit.predict(start=len(train_data), end=len(df)-1, dynamic=False)

# 调整预测值的索引
predictions.index = pd.date_range(start=train_data.index[-1], periods=len(predictions), freq='D')[1:]

# 可视化预测结果和测试集
plt.plot(test_data.index, test_data.values, label='Actual')
plt.plot(predictions.index, predictions.values, label='Predicted')
plt.title('Stock Price Prediction')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()

# 设置x轴刻度
plt.xticks(pd.date_range(test_data.index[0], test_data.index[-1], freq='W'))

plt.show()

ok持續修正

來試試看照著他所說的修改

ok成功了沒有出現錯誤圖也正常顯示大功告成ya!!!

只是看起來預測值跟實際值差有點多啊…

看一下有沒有辦法讓模型更準確一些

好的這次他沒有幫忙修正代碼而是直接明白地說股票價格預測是一個複雜的問題單純基於時間序列分析的簡單模型是無法捕捉這其他影響股票價格的因素,並且告訴我如果想要提升預測經度可以考慮以下幾個方向,並列表示地把

1到4點整理出來,最後總結因為這是一個複雜的問題不存在一種方法可以達到

100%準確性,模型預測結果還要跟市場趨勢,分析師預測做比較來獲得更全面的預測結果

ok這個實驗算是結束了,先不說精準度的問題chatgpt確實可以自行撰寫出預測股價的代碼,並且在過程中如果代碼有問題他也有辦法自行理解問題並修正

最後在精準度的問題上他也給了四點建議,如果要寫我當然可以繼續從這四點建議追問下去,不過本文就會太長,因此本文就在這裡告一段落未來有機會

我再從這四點繼續追問chatgpt

總結

我可以看到chatgpt是一個超級強大的助手,特別是對於像我這樣的內容創作者。過去身為一個工程師我常常為一篇文章編寫大量代碼,但在這篇文章中,我什麼也沒寫。確實是一個不錯的休息🙂

感謝您的閱讀,希望您喜歡這篇文章!

如果您想要來支持我的內容創作那麼您可以用

PayPal

請我喝杯咖啡讓我更有創作的熱情跟動力🙂

留言
avatar-img
留言分享你的想法!
William Chen-avatar-img
2023/04/27
真的太扯了,連所有文字都是翻譯的 誇張
William Chen-avatar-img
2023/04/27
這叫什麼創作xd 根本就是在抄襲https://medium.com/geekculture/can-openais-chatgbt-forecast-stock-market-prices-7db9d11588fb
avatar-img
于正龍(Ricky)的沙龍
36會員
55內容數
人工智能工作經驗跟研究
2025/03/05
你做錯了。你剛剛發給 ChatGPT 的「寫一個函式來……」的提示?刪掉它吧。這些通用提示就是為什麼你的編碼速度還跟其他人一樣的原因。 在與 AI 進行超過 3,000 小時的結對編程後,我發現了真正有效的方法——而這並不是你想的那樣。 真相是:85% 的開發者陷入了 AI 驅動的複製粘貼循環。
2025/03/05
你做錯了。你剛剛發給 ChatGPT 的「寫一個函式來……」的提示?刪掉它吧。這些通用提示就是為什麼你的編碼速度還跟其他人一樣的原因。 在與 AI 進行超過 3,000 小時的結對編程後,我發現了真正有效的方法——而這並不是你想的那樣。 真相是:85% 的開發者陷入了 AI 驅動的複製粘貼循環。
2025/03/05
簡介 — 我如何停止浪費時間的故事 幾年前,我意識到我花在“做事”上的時間比實際在專案上取得進展的時間要多。我醒來時有無休止的待辦事項清單、回復電子郵件、參加會議、審查檔,但到一天結束時,我覺得我實際上沒有在任何重要的事情上取得進展。 有一天,一個朋友告訴我: 忙碌並不等同於有效。 這讓
2025/03/05
簡介 — 我如何停止浪費時間的故事 幾年前,我意識到我花在“做事”上的時間比實際在專案上取得進展的時間要多。我醒來時有無休止的待辦事項清單、回復電子郵件、參加會議、審查檔,但到一天結束時,我覺得我實際上沒有在任何重要的事情上取得進展。 有一天,一個朋友告訴我: 忙碌並不等同於有效。 這讓
2023/09/30
看到滿多年輕工程師提問:工作時經常查 ChatGPT,感覺不太踏實,沒關係嗎? 讓我簡單談論一下這件事 --- 首先,讓我們把時間倒回 2000 年代 google 剛出來的時候 當時一定也是這樣, 年輕工程師遇到問題狂查 google 資深工程師則覺得 google 可有可無,
2023/09/30
看到滿多年輕工程師提問:工作時經常查 ChatGPT,感覺不太踏實,沒關係嗎? 讓我簡單談論一下這件事 --- 首先,讓我們把時間倒回 2000 年代 google 剛出來的時候 當時一定也是這樣, 年輕工程師遇到問題狂查 google 資深工程師則覺得 google 可有可無,
看更多