智能股票预测模型私人定制:八步实战指南

2026-06-18阅读 0热度 0
ai 人工智能

创建属于自己的股票预测模型?听起来就让人兴奋。本文会一步步带你用 Python 搭一个出来,就算你编程经验不多,也不用担心——跟着步骤走,一样能搞定。

一、为什么要创建自定义股票预测模型?

为什么要自己动手搭一个股票预测模型?答案不光是“想赚钱”,更深层的原因是,每个投资者对市场的理解都不一样。传统方法很难完全捕捉市场的复杂动态,而自定义模型能让你把真正关心的因素放进去。原因主要有这么三个:

洞察:深入了解不同因素如何影响股票价格

市场变化多端。通过构建自己的模型,你可以把宏观经济指标、公司财务状况、市场情绪等多种因素都考虑进来,而不是被固定公式框死。这样预测出来的走势,往往更贴近你对市场的真实判断。

定制:根据你的具体需求和偏好定制模型

不同人的风险偏好和投资目标千差万别。自定义模型允许你把自己的理念融入预测过程——是保守还是激进,是长期持有还是波段操作,都能在模型里体现出来。说到底,只有自己最懂自己的策略。

创新:尝试各种技巧,发现最适合自己的方法

模型的灵活性和可扩展性也很关键。市场环境变了,你的判断变了,模型随时可以调整优化。这种“迭代”的能力,让自定义模型在应对变化时更加得心应手。

二、搭建自定义股票预测模型

第①步 需要了解的工具和库

在敲代码之前,先熟悉一下这趟旅途要用到的“工具箱”:

  1. Python:编程语言,没它不行。
  2. Pandas:数据处理利器。
  3. NumPy:数值运算必备。
  4. Scikit-learn:机器学习的“瑞士军刀”,用于构建和评估模型。
  5. XGBoost 和 LightGBM:两款提升算法,能让预测更准。
  6. Yahoo Finance:获取股票数据的数据源。

第②步 加载和准备数据

数据是一切的基础。下面这段代码会从雅虎财经拉取近一年的股价数据:

import yfinance as yf
import pandas as pd

def load_data(ticker):
    stock = yf.Ticker(ticker)
    df = stock.history(period="1y")
    df['Date'] = df.index
    return df

第③步 添加技术指标

原始数据不够用,需要构造一些能反映市场状态的特征。比如布林带和相对强弱指标:

def bollinger_bands(close, window=20, num_std=2):
    rolling_mean = close.rolling(window=window).mean()
    rolling_std = close.rolling(window=window).std()
    upper_bb = rolling_mean + (rolling_std * num_std)
    lower_bb = rolling_mean - (rolling_std * num_std)
    return upper_bb, lower_bb

def compute_rsi(close, window=14):
    delta = close.diff()
    gain = (delta.where(delta > 0, 0)).rolling(window=window).mean()
    loss = (-delta.where(delta < 0, 0)).rolling(window=window).mean()
    rs = gain / loss
    return 100 - (100 / (1 + rs))

第④步 选择并训练模型

机器学习模型这边,准备了多种选择:决策树、线性回归、随机森林、梯度提升、支持向量机,再加上XGBoost和LightGBM。你可以根据需要挑,也可以把它们组合起来用。下面是训练和评估的通用函数:

from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import VotingRegressor
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from sklearn.svm import SVR
import xgboost as xgb
import lightgbm as lgb

models = {
    'Decision Tree': DecisionTreeRegressor(random_state=42),
    'Linear Regression': LinearRegression(),
    'Random Forest': RandomForestRegressor(random_state=42),
    'Gradient Boosting': GradientBoostingRegressor(random_state=42),
    'Support Vector Machine': SVR(),
    'XGBoost': xgb.XGBRegressor(random_state=42),
    'LightGBM': lgb.LGBMRegressor(random_state=42)
}

def train_and_evaluate(X, y, selected_models):
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    scaler = StandardScaler()
    if len(selected_models) > 1:
        voting_regressor = VotingRegressor(
            estimators=[(name, models[name]) for name in selected_models]
        )
        model = Pipeline(steps=[
            ('scaler', scaler),
            ('regressor', voting_regressor)
        ])
    else:
        model = Pipeline(steps=[
            ('scaler', scaler),
            ('regressor', models[selected_models[0]])
        ])
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    
    mae = mean_absolute_error(y_test, y_pred)
    mse = mean_squared_error(y_test, y_pred)
    rmse = np.sqrt(mse)
    r2 = r2_score(y_test, y_pred)
    mape = mean_absolute_percentage_error(y_test, y_pred)
    
    return mae, mse, rmse, r2, mape, y_test, y_pred, model

第⑤步 多模型结合

组合往往比单个模型更强。用投票回归器把多个模型“投”到一起,效果通常会更好:

第⑥步 保存您的模型

训练好之后记得保存,下次直接加载用,不用重新训练:

import pandas as pd
import numpy as np
import yfinance as yf

import joblib
# Load the trained model
model = joblib.load('trained_model.pkl')
…

def on_button_clicked(b):
    global trained_model
    with output:
        clear_output()
        selected_models = [checkbox.description for checkbox in model_checkboxes if checkbox.value]
        if selected_models:
            print(f"Running models: {', '.join(selected_models)}")
            mae, mse, rmse, r2, mape, y_test, y_pred, trained_model = train_and_evaluate(X, y, selected_models)
            print("nModel Evaluation Metrics:")
            print(f"Mean Absolute Error: ${mae:.2f}")
            print(f"Mean Squared Error: ${mse:.2f}")
            print(f"Root Mean Squared Error: ${rmse:.2f}")
            print(f"R^2 Score: {r2:.4f}")
            print(f"Mean Absolute Percentage Error: {mape:.2f}%")
    
            print("nSample of predictions vs true values:")
            results_df = pd.DataFrame({'True Price': y_test, 'Predicted Price': y_pred})
            display(results_df.head())
    
            # Sa ve the trained model
            sa ve_model(trained_model, 'trained_model.pkl')
    
        else:
            print("Please select at least one model.")

第⑦步 模型评估指标

模型好不好,得用指标说话。常用指标有这些:

  • 平均绝对误差 (MAE):预测值与实际值之间的平均绝对误差。
  • 平均平方误差 (MSE):预测值与实际值之间的平均平方误差。
  • 均方根误差 (RMSE):MSE的平方根,表示误差大小。
  • 平均绝对百分比误差 (MAPE):预测值与实际值之间的平均绝对百分比误差。

计算代码如下:

mae = mean_absolute_error(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
r2 = r2_score(y_test, y_pred)
mape = mean_absolute_percentage_error(y_test, y_pred)

return mae, mse, rmse, r2, mape, y_test, y_pred, model

第⑧步 加载模型和股票价格预测

模型加载后,就可以用它来预测未来股价了。下面这个函数会基于最近的数据,逐步预测未来指定天数的价格:

# Prepare a list to store predictions
predictions = []

# Check if the recent_data DataFrame has the correct number of columns
if recent_data.shape[1] != len(expected_features):
    raise ValueError(f"Expected {len(expected_features)} features but got {recent_data.shape[1]}")

# Predict future prices
for _ in range(future_days):
    # Predict the next day's price
    prediction = model.predict(recent_data)
    predictions.append(prediction[0])
        
    # Create a new row for future prediction
    new_row = recent_data.copy()
    new_row.loc[0, 'Open'] = prediction[0]  # Update the 'Open' feature for the new row
    
    # Append new_row to recent_data
    recent_data = pd.concat([recent_data[1:], new_row], ignore_index=True)

return predictions

三、观点回顾

搭建自己的股价预测模型,整个过程非常有价值。你可以完全自定义每一个细节:选什么特征、用什么算法、如何组合。真正做出一个贴合自己交易风格的工具,成就感很强。

  • 自定义模型的优势:自建模型能让用户根据个人需求和偏好定制,更深入理解不同因素如何影响股价,并有空间尝试创新。
  • 必要的工具和库:需要掌握Python,以及Pandas、NumPy、Scikit-learn、XGBoost和LightGBM等库。
  • 数据准备和特征工程的重要性:加载和准备数据是建模前的基础,而添加技术指标这样的特征工程能让模型更好地反映市场状况。
  • 多模型集成:通过投票回归器等组合多个模型,可以提升预测能力和鲁棒性。
  • 模型评估指标:用MAE、MSE、RMSE、R²和MAPE来评估模型性能,看清长处和短板。
  • 实践和定制:文中提供了完整的代码示例,动手跑一遍,再根据自己偏好调整,效果会更好。
免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策