美文网首页
不看错过好几亿!5分钟学会用Python预测美股价格

不看错过好几亿!5分钟学会用Python预测美股价格

作者: python大大 | 来源:发表于2019-05-29 07:21 被阅读0次

    前面的文章,从美股数据获取到相关性分析做了介绍和代码演示,接下来我们会用美股的历史数据对未来的价格做一个预测。

    预测股票价格

    不看错过好几亿!5分钟学会用Python预测美股价格

    预测股票价格

    特征工程

    将使用这三种机器学习模型来预测股票:

    简单线性分析,

    二次判别分析(QDA)

    K最近邻(KNN)。

    首先,先编写几个函数功能:高低百分比和百分比变化。

    dfreg = df.loc[:,[‘Adj Close’,’Volume’]]

    dfreg[‘HL_PCT’] = (df[‘High’] — df[‘Low’]) / df[‘Close’] * 100.0

    dfreg[‘PCT_change’] = (df[‘Close’] — df[‘Open’]) / df[‘Open’] * 100.0

    不看错过好几亿!5分钟学会用Python预测美股价格

    生成的最终数据框

    预处理和交叉验证

    不看错过好几亿!5分钟学会用Python预测美股价格

    交叉验证

    在将数据带入预测模型之前,将使用以下步骤清理和处理数据:

    1. 处理失缺失值

    2. 在切分标签数据,预测的目标是AdjClose列

    3. 缩放X,以便每个数据都满足线性回归分布

    4. 最后需要确定到X和X的训练集,用于模型生成和评估

    5. 将要预测的结果设置标签并将其标识为y

    6. 通过交叉验证训练测试分离训练和测试模型的分离

    好了,步骤讲完了。代码如下:

    Drop missing value

    dfreg.fillna(value=-99999, inplace=True)

    We want to separate 1 percent of the data to forecast

    forecast_out = int(math.ceil(0.01 * len(dfreg)))

    Separating the label here, we want to predict the AdjClose

    forecast_col = 'Adj Close'

    dfreg['label'] = dfreg[forecast_col].shift(-forecast_out)

    X = np.array(dfreg.drop(['label'], 1))

    Scale the X so that everyone can have the same distribution for linear regression

    X = preprocessing.scale(X)

    Finally We want to find Data Series of late X and early X (train) for model generation and evaluation

    X_lately = X[-forecast_out:]

    X = X[:-forecast_out]

    Separate label and identify it as y

    y = np.array(dfreg['label'])

    y = y[:-forecast_out]

    模型生成 - 愉快的预测开始了

    首先,导入Scikit-Learn:

    from sklearn.linear_model import LinearRegression

    from sklearn.neighbors import KNeighborsRegressor

    from sklearn.linear_model import Ridge

    from sklearn.preprocessing import PolynomialFeatures

    from sklearn.pipeline import make_pipeline

    简单线性分析和二次判别分析

    简单线性分析显示两个或多个变量之间的线性关系。当我们在两个变量中绘制这种关系时,我们得到一条直线。二次判别分析与简单线性分析类似,只是模型允许多项式(例如:x平方)并产生曲线。

    线性回归预测因变量(y)作为输出给出独立变量(x)作为输入。在绘图期间,这将给我们一条直线,如下所示:

    不看错过好几亿!5分钟学会用Python预测美股价格

    简单线性回归

    下面通过使用Scikit-Learn库来训练模型。代码如下。

    Linear regression

    clfreg = LinearRegression(n_jobs=-1)

    clfreg.fit(X_train, y_train)

    Quadratic Regression 2

    clfpoly2 = make_pipeline(PolynomialFeatures(2), Ridge())

    clfpoly2.fit(X_train, y_train)

    Quadratic Regression 3

    clfpoly3 = make_pipeline(PolynomialFeatures(3), Ridge())

    clfpoly3.fit(X_train, y_train)

    K近邻(KNN)

    该KNN使用特征相似性来预测数据点的值。这可确保分配的新点与数据集中的点类似。为了找出相似性,将选取点以得到最小距离(例如:欧几里德距离)。

    不看错过好几亿!5分钟学会用Python预测美股价格

    KNN模型可视化,您可以将被质疑的元素分组为k个元素

    KNN Regression

    clfknn = KNeighborsRegressor(n_neighbors=2)

    clfknn.fit(X_train, y_train)

    评估

    不看错过好几亿!5分钟学会用Python预测美股价格

    简单快速而有效的评估方法

    一种简单快速而有效的评估方法是在每个训练模型中使用得分方法。得分方法使用测试数据集的y找到self.predict(X)的平均准确度。

    confidencereg = clfreg.score(X_test, y_test)

    confidencepoly2 = clfpoly2.score(X_test,y_test)

    confidencepoly3 = clfpoly3.score(X_test,y_test)

    confidenceknn = clfknn.score(X_test, y_test)

    results

    ('The linear regression confidence is ', 0.96399641826551985)

    ('The quadratic regression 2 confidence is ', 0.96492624557970319)

    ('The quadratic regression 3 confidence is ', 0.9652082834532858)

    ('The knn regression confidence is ', 0.92844658034790639)

    这显示了这些模型的大多数有着极高准确度分数(> 0.95)。然而,这并不意味着我们可以盲目套用,并交易股票。仍有许多问题需要注意,特别是对于不同价格轨迹不同的公司。

    为了直观感觉,打印一些预测的股票预测结果。

    forecast_set = clf.predict(X_lately)

    dfreg['Forecast'] = np.nan

    result

    (array([ 115.44941187, 115.20206522, 116.78688393, 116.70244946,

    116.58503739, 115.98769407, 116.54315699, 117.40012338,

    117.21473053, 116.57244657, 116.048717 , 116.26444966,

    115.78374093, 116.50647805, 117.92064806, 118.75581186,

    118.82688731, 119.51873699]), 0.96234891774075604, 18)

    预测可视化

    使用现有的历史数据来预测未来的价格。这将有助于我们理解并掌握,可视化模型如何预测未来的股票定价。

    last_date = dfreg.iloc[-1].name

    last_unix = last_date

    next_unix = last_unix + datetime.timedelta(days=1)

    for i in forecast_set:

    next_date = next_unix

    next_unix += datetime.timedelta(days=1)

    dfreg.loc[next_date] = [np.nan for _ in range(len(dfreg.columns)-1)]+[i]

    dfreg['Adj Close'].tail(500).plot()

    dfreg['Forecast'].tail(500).plot()

    plt.legend(loc=4)

    plt.xlabel('Date')

    plt.ylabel('Price')

    plt.show()

    不看错过好几亿!5分钟学会用Python预测美股价格

    股票预测可视化

    可以看到蓝色显示了基于回归的股票价格预测。该预测显示未来价格会出现不太长时间的低迷,然后恢复。因此,可以在低迷期间购买股票并在经济好转期间卖出。

    相关文章

      网友评论

          本文标题:不看错过好几亿!5分钟学会用Python预测美股价格

          本文链接:https://www.haomeiwen.com/subject/gvgstctx.html