Stonksmaster - 使用 Python 和 ML 预测股票价格📈
机器学习新手?
需要一个好的初始项目来开始学习吗?
您阅读的是正确文章!
在本文中,我们将尝试使用机器学习及其相关概念构建一个非常基础的股票预测应用程序。顾名思义,它肯定会既实用又有趣。那就让我们开始吧。
我们希望您对数据科学和机器学习有基本的了解。
“使计算机能够无需明确编程而进行学习的研究领域”
这就是 Arthur Samuel 所描述的机器学习。
近年来,机器学习已在各个领域得到应用,其中包括虚拟个人助理、在线客户支持、产品推荐等。
我们将使用诸如numpy
、、、和其他一些库pandas
。matplotlib
scikit-learn
如果你不熟悉这些库,可以参考以下资源:
机器学习的步骤
在执行任何机器学习任务时,我们通常遵循以下步骤:
-
收集数据
这是最显而易见的一步。如果我们想要开展机器学习项目,首先需要数据。无论是来自 Excel、Access、文本文件的原始数据,还是图像、视频等形式的数据,这一步都构成了未来学习的基础。 -
准备数据:
糟糕的数据总是会导致错误的见解,从而引发问题。我们的预测结果取决于所用数据的质量。我们需要花时间确定数据的质量,然后采取措施修复数据缺失等问题。 -
训练模型
此步骤涉及选择合适的算法和以模型形式呈现的数据表示。通俗地说,模型表示是将我们实际生活中的问题陈述表示成计算机能够理解的数学模型的过程。清理后的数据将根据场景按比例分为三个部分——训练、验证和测试。然后将训练部分输入模型,以学习其中的关系/函数。 -
评估模型
我们通常不会只训练一个模型,而是训练多个模型。因此,为了比较不同模型的性能,我们会在验证数据上评估所有这些模型。由于所有模型都未曾见过验证数据,因此验证数据有助于我们评估模型在实际环境中的性能。 -
提升性能
通常,模型的性能一开始并不令人满意,因此我们需要重新审视之前在数据表示和模型参数方面的选择。我们可能会选择使用不同的变量(特征),甚至收集更多数据。在最坏的情况下,我们可能需要更改整个架构以获得更好的性能。 -
报告性能
一旦我们对验证集上的模型性能感到满意,我们就会在测试数据集上评估我们选择的模型,这为我们提供了对我们的模型在以前从未见过的真实世界数据上的性能的清晰认识。
现在开始我们的项目,因为我们正在处理股票市场并试图预测股票价格,最重要的是能够阅读股票
如何解读股票?
阅读股票图表或股票报价是一项关键技能,可以了解股票的表现、大盘的走势以及该股票的预期表现。
股票有报价页面或图表,提供有关股票、其表现以及公司整体的基本和更详细的信息。那么,接下来的问题是,股票图表是由什么组成的?
股票图表
股票图表是有关特定公司股票的一组信息,通常显示有关价格变化、当前交易价格、历史最高价和最低价、股息、交易量和其他公司财务信息。
我们还想让你熟悉一些股票市场的基本术语
股票代码
股票代码是股票交易所用来描述特定股票的符号。例如,苹果的股票代码是 (AAPL),而 Snapchat 的股票代码是 (SNAP)。
开盘价
开盘价就是股票在某一天的开盘价格
收盘价
对于大多数股票来说,收盘价可能比开盘价更重要。收盘价是股票在正常交易时段停止交易的价格(盘后交易也会影响股价)。如果股票收盘价高于前一天的收盘价,则被视为股价上涨。反之,如果股票收盘价低于前一天的收盘价,则被视为股价下跌。
现在是时候开始动手设置项目了
初始化我们的项目
步骤 1:收集数据
使用iexfinance
库下载数据框。我们获取的数据框包含股票的每日数据。下载的数据框提供了大量信息,包括开盘价、收盘价、成交量等。但我们感兴趣的是开盘价及其对应的日期。
import pandas as pd
import numpy as np
import iexfinance
from iexfinance.stocks import get_historical_data
from datetime import datetime, date
# start date should be within 5 years of current date according to iex API we have used
# The more data we have, the better results we get!
start = datetime(2016, 1, 1)
end = date.today()
# use your token in place of token which you will get after signing up on IEX cloud
# Head over to https://iexcloud.io/ and sign-up to get your API token
df = get_historical_data("AAPL", start=start, end=end, output_format="pandas", token="your_token")
第 2 步:准备数据
此外,将日期转换为相应的时间戳也很方便。最后,我们将得到一个包含开盘价和时间戳的数据框。
我们需要确保创建的模型是好的。我们会保留一些算法无法访问的数据,并利用这些数据来获得第二个独立的结论,以评估最佳模型的准确度。
我们将加载的数据集分成两部分,其中 80% 将用于训练、评估和选择我们的模型,20% 将作为验证数据集。
from sklearn.model_selection import train_test_split
prices = df[df.columns[0:1]]
prices.reset_index(level=0, inplace=True)
prices["timestamp"] = pd.to_datetime(prices.date).astype(int) // (10**9)
prices = prices.drop(['date'], axis=1)
prices
dataset = prices.values
X = dataset[:,1].reshape(-1,1)
Y = dataset[:,0:1]
validation_size = 0.15
seed = 7
X_train, X_validation, Y_train, Y_validation = train_test_split(X, Y, test_size=validation_size, random_state=seed)
该函数train_test_split()
来自scikit-learn
库。
scikit-learn(也称为 sklearn)是一个免费的 Python 软件机器学习库。Scikit-learn 通过一致的 Python 接口提供了一系列监督式和无监督式学习算法。
该库专注于数据建模,而非数据的加载、操作和汇总。
步骤3:训练模型
我们不知道哪种算法适合这个项目或者应该使用什么配置。
因此,我们使用 6 种不同的算法进行测试:
- 线性回归(LR)
- 套索(LASSO)
- 弹性网络(EN)
- KNN(K最近邻)
- CART(分类和回归树)
- SVR(支持向量回归)
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import ElasticNet
from sklearn.tree import DecisionTreeRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.svm import SVR
# Test options and evaluation metric
num_folds = 10
seed = 7
scoring = "r2"
# Spot-Check Algorithms
models = []
models.append((' LR ', LinearRegression()))
models.append((' LASSO ', Lasso()))
models.append((' EN ', ElasticNet()))
models.append((' KNN ', KNeighborsRegressor()))
models.append((' CART ', DecisionTreeRegressor()))
models.append((' SVR ', SVR()))
步骤4:评估模型
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
# evaluate each model in turn
results = []
names = []
for name, model in models:
kfold = KFold(n_splits=num_folds, random_state=seed, shuffle=True)
cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)
# print(cv_results)
results.append(cv_results)
names.append(name)
msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
print(msg)
上述代码的输出给出了每个算法的准确率估计。我们需要比较各个模型,并选择最准确的模型。
一旦我们选择了准确率最高的结果,我们所要做的就是
- 定义模型
- 将数据拟合到我们的模型中
- 做出预测
将您的预测与实际数据一起绘制,两个图将几乎重叠。
步骤 5:报告模型并做出预测
# Future prediction, add dates here for which you want to predict
dates = ["2020-12-23", "2020-12-24", "2020-12-25", "2020-12-26", "2020-12-27",]
#convert to time stamp
for dt in dates:
datetime_object = datetime.strptime(dt, "%Y-%m-%d")
timestamp = datetime.timestamp(datetime_object)
# to array X
np.append(X, int(timestamp))
from matplotlib import pyplot as plt
from sklearn.metrics import mean_squared_error
# Define model
model = DecisionTreeRegressor()
# Fit to model
model.fit(X_train, Y_train)
# predict
predictions = model.predict(Xp)
print(mean_squared_error(Y, predictions))
# %matplotlib inline
fig= plt.figure(figsize=(24,12))
plt.plot(X,Y)
plt.plot(X,predictions)
plt.show()
太棒了!你终于搭建了一个股票预测器。希望本文对初学者和其他所有人有所帮助。如果你有兴趣将这个项目提升到一个新的水平,我们推荐你阅读 LSTM 神经网络的相关知识并尝试实现它。
虽然我们预测价格,但这种模型实际上是不可行的,因为在进行预测时必须考虑很多其他因素!
模型参考
更新:我们根据这篇文章发表了一篇新文章,其中我们使用了集成方法来进一步增强我们的模型。


Stonksmaster:使用 Python 和 ML 预测股票价格 - 第二部分
Rishav Raj Kumar,GNU/Linux 用户组,NIT Durgapur ・ 2020 年 12 月 10 日
我们希望您觉得本文很有见地。
这是GNU/Linux 用户组、NIT Durgapur组织的10 Days of Code项目之一
请访问我们的网站以了解有关我们的更多信息,并关注我们:
本文由
文章来源:https://dev.to/nitdgplug/stonksmaster-predict-stock-prices-using-python-ml-3hmc