Granite TimeSeries FlowState R1保姆级教程:从零开始完成你的第一个预测项目
Granite TimeSeries FlowState R1保姆级教程从零开始完成你的第一个预测项目你是不是也对时间序列预测感到好奇但又觉得它门槛太高不知道从何下手比如想预测下个月的销售额或者分析一下服务器流量的变化趋势但面对一堆数据和复杂的算法就头疼。别担心今天我们就来一起动手用IBM的Granite TimeSeries FlowState R1模型从零开始完成你的第一个预测项目。整个过程就像搭积木一样简单你只需要会一点基础的Python跟着我一步步操作就行。我们会在Jupyter Notebook里完成所有工作代码可以直接运行看到每一步的结果。1. 开始之前你需要准备什么在动手敲代码之前我们先花几分钟把“工具箱”准备好。放心东西不多也不复杂。首先你需要一个能运行Python代码的环境。我强烈推荐使用Anaconda来管理你的Python环境它能帮你轻松处理各种包依赖避免版本冲突的麻烦。如果你还没安装去Anaconda官网下载一个适合你操作系统的版本跟着安装向导点“下一步”就行。环境准备好之后我们需要安装几个这次要用到的Python库。打开你的终端或者Anaconda Prompt创建一个新的环境比如叫granite-ts然后激活它并安装以下库# 创建并激活新环境可选但推荐 conda create -n granite-ts python3.9 conda activate granite-ts # 安装核心库 pip install pandas numpy matplotlib scikit-learn # 安装Jupyter Notebook我们的主战场 pip install notebook # 安装用于调用IBM Watsonx.ai API的库 pip install ibm-watson-machine-learning这里简单说一下这几个库是干嘛的pandas numpy处理数据的“黄金搭档”用来加载、清洗和操作我们的CSV数据。matplotlib画图神器让数据可视化一眼看清趋势。scikit-learn机器学习工具包我们用它来做一些简单的数据预处理。ibm-watson-machine-learning这是和Granite模型“对话”的桥梁。最后你还需要一个CSV格式的数据文件。对于第一次尝试我建议你使用一个干净、简单的数据集。你可以从网上下载一些公开的时间序列数据集比如“航空乘客数量”、“每日气温”等。为了教程的连贯性我这里假设你有一个名为sales_data.csv的文件它至少包含两列一列是日期比如date另一列是你想预测的值比如sales。好了工具齐备数据在手我们这就进入Jupyter Notebook开始真正的旅程。2. 第一步启动Notebook与加载数据打开终端在你想保存这个项目的文件夹里输入jupyter notebook并回车。浏览器会自动打开Jupyter的界面点击右上角的“New”创建一个新的Python 3笔记本。首先让我们导入所有需要的库就像厨师备菜一样。# 导入必要的库 import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler import json import os # 为了在Notebook里直接显示图表 %matplotlib inline接下来就是加载我们的数据了。假设你的sales_data.csv文件放在和这个Notebook同一个目录下。# 加载数据 file_path ‘sales_data.csv’ # 替换为你的文件路径 df pd.read_csv(file_path) # 让我们先看看数据长什么样 print(“数据前5行”) print(df.head()) print(“\n数据基本信息”) print(df.info()) print(“\n数据统计描述”) print(df.describe())运行这段代码你会看到数据的预览、列的类型以及一些基本的统计信息比如平均值、最大值、最小值。关键要检查两件事日期列是否被正确识别为日期时间类型如果没有可能需要用pd.to_datetime(df[‘date’])转换一下。你要预测的那一列比如sales有没有缺失值可以用df.isnull().sum()查看。3. 第二步让数据“开口说话”——可视化分析一堆数字看起来枯燥画成图就直观多了。让我们把销售趋势画出来感受一下数据的故事。# 确保日期列是日期时间格式并设为索引很多时间序列分析需要 if ‘date’ in df.columns: df[‘date’] pd.to_datetime(df[‘date’]) df.set_index(‘date’, inplaceTrue) # 绘制时间序列图 plt.figure(figsize(14, 6)) plt.plot(df.index, df[‘sales’], label‘销售额’, color‘blue’, linewidth2) plt.title(‘销售额时间序列趋势’) plt.xlabel(‘日期’) plt.ylabel(‘销售额’) plt.grid(True, which‘both’, linestyle‘—’, linewidth0.5, alpha0.7) plt.legend() plt.tight_layout() plt.show()这张图能告诉你很多信息数据是上升趋势还是下降趋势有没有明显的周期性波动比如每12个月一个循环有没有一些异常的尖峰或低谷这些观察对你后续理解模型的预测结果很有帮助。4. 第三步为模型准备“食材”——数据预处理模型不能直接“吃”原始数据我们需要稍微加工一下。对于时间序列预测尤其是使用Granite这类模型通常需要做两件事1. 处理缺失值如果数据里有缺失的日期或销售额我们需要补上。简单的方法可以用前一个值填充df.fillna(method‘ffill’)或者用插值法。2. 数据归一化这是非常重要的一步。模型在训练时如果不同特征这里我们只有一个特征‘sales’的数值范围差异巨大会导致学习困难。归一化就是把所有数据缩放到一个固定的区间比如0到1之间。# 假设我们处理一个简单的单变量序列 # 提取我们要预测的序列 time_series df[‘sales’].values.reshape(-1, 1) # 转换为二维数组因为缩放器需要 # 初始化缩放器并将数据缩放到0-1之间 scaler MinMaxScaler(feature_range(0, 1)) scaled_series scaler.fit_transform(time_series) print(“原始数据前5个值”, time_series[:5].flatten()) print(“归一化后前5个值”, scaled_series[:5].flatten())记住这个scaler等模型预测出结果后我们需要用它把数据“变回”原来的尺度才能得到有实际意义的预测值比如真实的销售额。5. 第四步与Granite模型“握手”——API调用准备现在来到了核心环节调用Granite TimeSeries FlowState R1模型。我们需要先配置好访问凭证。你需要一个IBM Cloud账户并在Watsonx.ai项目中获取API密钥和项目ID。重要请不要将你的API密钥直接硬编码在代码里然后上传到公开平台。这里为了演示我们先写在代码里但在实际项目中你应该使用环境变量或配置文件来管理密钥。# 替换为你自己的凭证 api_key “YOUR_IBM_CLOUD_API_KEY” project_id “YOUR_WATSONX_PROJECT_ID” # 导入并设置WML客户端 from ibm_watson_machine_learning import APIClient wml_credentials { “url”: “https://us-south.ml.cloud.ibm.com”, # 根据你的区域可能不同 “apikey”: api_key, } client APIClient(wml_credentials) client.set.default_project(project_id) # 指定我们要使用的模型 model_id “ibm/granite-timeseries-1b-flowstate-r1” # 模型ID6. 第五步发出预测请求并获取结果数据准备好了客户端也配置好了现在可以请模型帮我们做预测了。我们需要把处理好的时间序列数据按照模型要求的格式包装成“输入提示”prompt。对于时间序列预测prompt通常需要包含历史数据并指明我们要预测未来多少步比如未来7天。# 构建预测请求的payload # 假设我们用最后100个数据点作为历史预测未来30个点 historical_data scaled_series[-100:].flatten().tolist() # 取最后100个归一化后的值 forecast_horizon 30 input_prompt { “input”: [ { “role”: “user”, “content”: f”Given the following historical time series data: {historical_data}, forecast the next {forecast_horizon} steps.” } ], “parameters”: { “decoding_method”: “greedy”, “max_new_tokens”: 50, # 根据输出长度调整 “min_new_tokens”: 1, “repetition_penalty”: 1.0 } } # 调用模型进行预测 try: prediction_response client.deployments.direct_predict( model_idmodel_id, payloadinput_prompt ) print(“API调用成功”) # 解析返回的预测结果这里需要根据实际返回结构调整 predicted_content prediction_response[‘results’][0][‘generated_text’] print(“模型返回的文本”, predicted_content[:200]) # 打印前200字符看看 except Exception as e: print(f”API调用出错{e}”)这里有个小难点模型的返回结果是一段文本我们需要从中提取出预测的数字序列。这可能需要一些简单的字符串处理或者模型返回的结构本身就是JSON。你需要仔细查看API文档或实际返回结果来编写解析代码。假设我们解析出了一个列表predicted_scaled_values。7. 第六步解读模型的“预言”——结果分析与可视化拿到预测值后我们首先要把它从归一化的状态0-1之间转换回原始尺度。# 假设我们已经解析出了预测值列表 predicted_scaled_values predicted_scaled_values […] # 这里应替换为实际解析出的30个预测值列表 # 将预测值转换回原始尺度 # 注意scaler.inverse_transform 需要二维输入 predicted_values scaler.inverse_transform( np.array(predicted_scaled_values).reshape(-1, 1) ).flatten() print(“未来30步的预测值原始尺度”, predicted_values)现在让我们把历史数据和预测数据画在一起直观地看看模型预测的趋势。# 创建时间索引 # 假设历史数据是每天的我们基于最后一个历史日期生成未来的日期 last_date df.index[-1] future_dates pd.date_range(startlast_date pd.Timedelta(days1), periodsforecast_horizon, freq‘D’) # ‘D’代表天 # 绘图 plt.figure(figsize(15, 7)) # 绘制历史数据 plt.plot(df.index[-150:], df[‘sales’].values[-150:], label‘历史销售额’, color‘blue’, linewidth2) # 绘制预测数据 plt.plot(future_dates, predicted_values, label‘模型预测’, color‘red’, linestyle‘—’, linewidth2, marker‘o’) plt.title(‘销售额历史数据与模型预测对比’) plt.xlabel(‘日期’) plt.ylabel(‘销售额’) plt.grid(True, alpha0.3) plt.legend() plt.xticks(rotation45) plt.tight_layout() plt.show()看看这张图模型的预测线是延续了历史趋势还是出现了奇怪的转折你可以思考一下预测结果符合你的业务直觉吗如果历史数据有季节性预测线是否也体现了类似的周期性预测的不确定性如何注更高级的用法可以获取预测区间本教程暂不涉及8. 走完全程回顾与下一步跟着上面这些步骤走一遍你应该已经成功运行了你的第一个时间序列预测项目。从一堆CSV数据到一张包含未来趋势的图表这个过程本身就是一个很大的收获。整体体验下来感觉Granite TimeSeries FlowState R1通过API调用还是挺方便的省去了自己从头搭建和训练模型的复杂过程。对于初学者来说最大的挑战可能在于理解数据的格式要求以及如何正确解析模型的输出。一旦打通这个环节后面就可以尝试更复杂的数据比如多变量序列、调整预测步长、或者结合业务知识来解读结果了。如果你还想继续深入我建议可以从这几个方向试试数据质量试试用有缺失值、有异常值的数据看看模型表现如何并学习相应的数据清洗方法。特征工程除了销售额本身能否加入“是否节假日”、“促销活动”等作为额外输入帮助模型学得更好模型评估如何定量地知道预测准不准可以学习一下MAE平均绝对误差、RMSE均方根误差这些评估指标。尝试其他模型Watsonx.ai平台上还有其他时间序列模型可以对比一下效果。最重要的是保持动手和好奇。时间序列预测的世界很大但这个小小的起点已经为你打开了一扇门。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。