更新於 2023/02/15閱讀時間約 17 分鐘

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

機器人會幫助我們獲得財務自由嗎?
毫無疑問,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是一個超級強大的助手,特別是對於像我這樣的內容創作者。過去身為一個工程師我常常為一篇文章編寫大量代碼,但在這篇文章中,我什麼也沒寫。確實是一個不錯的休息🙂
感謝您的閱讀,希望您喜歡這篇文章!
如果您想要來支持我的內容創作那麼您可以用
請我喝杯咖啡讓我更有創作的熱情跟動力🙂
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.