机器学习实战项目中,回归与分类模型中该如何科学定义目标变量Y?

前言

在机器学习项目里,目标变量 (Y) 的定义决定了你能解答什么问题,以及模型能给业务带来什么价值。选择不当不仅可能导致模型误差大、偏差严重,还可能让业务决策方向偏离。

本文分两大场景:

  1. 供应链项目中的 销量预测(回归问题)
  2. 营销项目中的 高潜力回购用户预测(分类问题)

本篇将针对每个场景,给出多种 Y 的设定方案,是比较 通俗易懂的方案,每种方案的优缺点与适用情形;然后给出详尽的 特征工程流程与技巧


1 场景一:销量预测回归模型

1.1 多种 Y 的设定方案(目标变量)

以下是常见的不同定义方式:

方案编号Y 定义数学表达优点风险 / 注意点典型适用情境
方案 A1:原始销量当期销量数值Yt=Salest Y_t = Sales_t Yt=Salest易解释;直接与库存/补货/生产规划对应分布可能有长尾,极端值/促销衰退期/零销量期噪声大;误差度量敏感产品稳定、历史销量记录丰富、促销波动较小
方案 A2:对数变换后的销量用 log 或类似变换平滑销量Yt=log⁡(Salest+c) Y_t = \log(Sales_t + c) Yt=log(Salest+c)(例如 (c = 1) 平滑零销量)缩小长尾影响;使误差分布近似正态;对比例误差敏感性降低反变换后解释比较复杂;零或负销量需处理;业务方可能不喜欢“对数销量”这个概念零销量/低销量很多,销量跨度大(small SKUs + large SKUs 混在一起)
方案 A3:环比/同比增长率与上期/同期相比的变化Yt=SalestSalest−1−1 Y_t = \frac{Sales_t}{Sales_{t-1}} - 1 Yt=Salest1Salest1 或者 Yt=SalestSalest−P−1 Y_t = \frac{Sales_t}{Sales_{t - P}} - 1 Yt=SalestPSalest1(P 为周期,如 52 周、12 月)弱化趋势与季节性影响;更关注变化/促销/市场事件的影响增长率极端值问题(基期小或为零);对业务解释性下降;未来预测可能不稳定如果你的业务关心“相对提升”多于“绝对销量”,如促销、预算评估、增长指标
方案 A4:差分销量(绝对变化量)本期销量减去上期销量Yt=Salest−Salest−1 Y_t = Sales_t - Sales_{t-1} Yt=SalestSalest1强调绝对变化;可捕捉向上的“需求增量”或下滑;便于用差分方法处理非平稳性噪声大;上下波动可能互相抵消;趋势 /季节性仍可能残留;如果滞后太短可能误导快消品、促销频繁的品类;补货周期短
方案 A5:未来窗口内销量总和预测未来 (k) 个时间单位(天/周/月)之和Yt=∑i=1kSalest+i Y_t = \sum_{i=1}^k Sales_{t+i} Yt=i=1kSalest+i与业务补货/生产周期一致;可适用于中短期计划;减少每天的波动窗口大小敏感;若窗口大,预测延迟;特征滞后要处理好;可能 data leakage 问题补货周期为月或数周的供应链;对于季节性商品或物流周期长的情况

1.2 特征工程教程

为不同 Y 定义准备特征,下面是一个详细流程与技巧,包含公式和步骤:

1.2.1 步骤 1:数据准备 &清洗

  • 收集历史销量数据 (Sales_t),包括产品/SKU/店铺/区域维度
  • 收集与销量可能相关的辅助变量:价格、促销活动、节假日、天气、库存水平、广告投放 etc.
  • 处理缺失值与零销量:如果大量零销量,可能需要平滑(如对数变换 + 常数),或考虑零销量与非零销量分开建模

1.2.2 步骤 2:时间序列特征

为捕捉过去销量对未来的影响,常用以下特征:

  • 滞后销量:

    Xlag(k)=Salest−k X_{lag(k)} = Sales_{t-k} Xlag(k)=Salestk

    可以取多个滞后值 ( k=1,2,3,\dots )

  • 滚动统计(滑动窗口):

    Xma(k)=1k∑i=1kSalest−i X_{ma(k)} = \frac{1}{k} \sum_{i=1}^k Sales_{t-i} Xma(k)=k1i=1kSalesti

  • 滚动最大/最小/标准差:

    Xstd(k)=1k∑i=1k(Salest−i−Xma(k))2 X_{std(k)} = \sqrt{\frac{1}{k} \sum_{i=1}^k (Sales_{t-i} - X_{ma(k)})^2} Xstd(k)=k1i=1k(SalestiXma(k))2

  • 周期性 / 日期特征:

    • 日、周、月指标

    • 周几 / 月份 /季度 one-hot 编码

    • 年/季节周期正余弦编码(sine / cosine):

      Xsin=sin⁡(2π⋅dayOfYear365),Xcos=cos⁡(2π⋅dayOfYear365) X_{sin} = \sin\left(\frac{2\pi \cdot dayOfYear}{365}\right), \quad X_{cos} = \cos\left(\frac{2\pi \cdot dayOfYear}{365}\right) Xsin=sin(3652πdayOfYear),Xcos=cos(3652πdayOfYear)

1.2.3 步骤 3:促销、价格与市场活动特征

  • 折扣率/促销强度:

    DiscountRatet=Priceoriginal,t−Pricediscounted,tPriceoriginal,t DiscountRate_t = \frac{Price_{\text{original}, t} - Price_{\text{discounted}, t}}{Price_{\text{original}, t}} DiscountRatet=Priceoriginal,tPriceoriginal,tPricediscounted,t

  • 是否有促销事件:

    Binary 特征 ( Promo_t = 1 ) if 有活动 else 0

  • 广告投入 /市场预算 /竞争者活动等

1.2.4 步骤 4:外部变量

  • 天气(温度、降水、节气 etc.)
  • 节假日/公共假期前后影响
  • 宏观经济指标(若适用,如零售业可能关心消费者购买力、人口变动 etc.)

1.2.5 步骤 5:处理趋势与平稳性

  • 若销量序列整体趋势明显,可用差分(如一阶差分):

    ΔSalest=Salest−Salest−1 \Delta Sales_t = Sales_t - Sales_{t-1} ΔSalest=SalestSalest1

  • 或者进行去趋势 + 季节性分解 (seasonal decomposition)

1.2.6 步骤 6:划分训练 /验证与防止数据泄露

  • 用时间切片(time-based split):训练集的时间晚于验证集要早,未来窗口不能被提前泄露
  • 若用未来窗口预测 ∑i=1kSalest+i\sum_{i=1}^k Sales_{t+i}i=1kSalest+i,要确保特征都是在时间 ( t ) 或之前的,不含未来信息

1.2.7 步骤 7:模型指标与评估

  • 常用指标:MAE(平均绝对误差)、RMSE、MAPE(平均绝对百分比误差)
  • 如果对大额/高销量 SKU 更在乎,可以加权评估(按销量权重或按利润权重)
  • 做残差分析,检查季节或促销期预测误差是否系统性偏高或低

2 场景二:营销中高潜力回购用户分类模型

2.1 多种 Y=1 定义方案(“会回购”的客户)

下面是常见的不同方式来定义 “回购”/“高潜力回购用户”:

方案编号Y = 1 的定义优点风险 / 注意点
方案 B1:未来窗口内至少一次回购客户在基准时间 (T_0) 之后的未来窗口大小为 (W)(如 3 个月/6 个月)内有一次或以上购买定义明确;多数客户样本可获取;易于计算与解释窗口选得太短可能漏掉潜在的慢购物客;太长可能标签延迟;样本不平衡;业务方可能要求频次或金额更高的“回购”
方案 B2:回购频次阈值在 (W) 窗口内购买次数 ≥ (K)(例如 ≥ 2 次/3 次等)能区分更忠诚/高频客户;营销资源更值得投入在这些客户上如果 K 阈值太高客户少;频次受产品类别/客单价影响;可能忽略高价值但少次购买者
方案 B3:回购金额阈值在未来窗口内总消费金额 ≥ 阈值 (M)聚焦高价值用户;对营收贡献重;能和销售/利润目标对齐金额阈值敏感;受品类价格变动的影响;少次但金额高 vs 多次但金额低可能被偏向;业务方可能难设置合理阈值
方案 B4:回购速度/间隔限制在未来窗口内有回购,且首次到回购间隔 ≤ 某阈值 (D)(例如 ≤ 30 天/90 天等)更能捕捉“活跃度高的潜力客户”;早期反应快的用户;有利于短期营销策略若客户自然购买周期长的产品,可能误判;间隔的阈值需要业务与数据双重调优;可能忽略稳定但周期长的复购用户
方案 B5:组合定义比如频次 + 金额 + 时间间隔综合规则更精细区分;高潜力用户定义更符合业务标准;营销投入回报率可能更高定义复杂,标签样本可能很少;解释与沟通成本高;可能会忽略某些边缘客户;需要进行阈值调优与验证

2.2. 特征工程流程

2.2.1 步骤 1:样本集定义 &标签生成

  • 确定基准时间 (T_0)(cut-off date),所有 “潜在客户” 的历史行为均在≤T0\le T_0T0时间内
  • 确定未来窗口大小 ( W ) 用于标签定义
  • 根据所选方案(B1~B5),为每个客户在训练集中生成标签 Y∈{0,1}Y \in \{0,1\}Y{0,1}

2.2.2 步骤 2:客户历史行为特征(基于 ( \le T_0 ) 时间段)

  • RFM 特征

    • Recency: 最近一次购买到 (T_0) 的时间间隔
      Ri=T0−tlast purchase by customer i R_i = T_0 - t_{\text{last purchase by customer i}} Ri=T0tlast purchase by customer i

    • Frequency: 在历史期内购买次数
      Fi=Norders by i in history F_i = N_{\text{orders by i in history}} Fi=Norders by i in history

    • Monetary: 历史期总消费金额
      Mi=∑orders≤T0Amount M_i = \sum_{orders \le T_0} Amount Mi=ordersT0Amount

  • 购买间隔特征

    • 平均购买间隔(如果有多次购买)
      Δtˉi=1Fi−1∑j=2Fi(tj−tj−1)if Fi≥2 \bar{\Delta t}_i = \frac{1}{F_i - 1} \sum_{j=2}^{F_i} (t_j - t_{j-1}) \quad \text{if } F_i \ge 2 Δtˉi=Fi11j=2Fi(tjtj1)if Fi2

    • 最后两次购买间隔

  • 品类/产品偏好特征

    • 买过哪些产品/品类的分布:one‐hot 或 count
    • 客单价分布:平均/中位数/最大/最小
  • 行为特征(若有行为数据):

    • 浏览量、加购未付、促销点击率/优惠券领取情况
    • 市场活动/邮件/Push 响应情况
  • 时间/周期特征

    • 过去购买的时间分布:是否偏向某些月/节假日/周末
    • 客户注册时间/首购时间:新客户 vs 老客户

2.2.3 步骤 3:特征处理与标准化

  • 对数变换:对于如消费金额这类正偏分布的特征可做 log 转换
  • 缩放(standardization / min-max)
  • 类别变量编码:one-hot 或 target encoding

2.2.4 步骤 4:训练 /验证划分与防止泄露

  • 用时间切片 split:训练集含所有 ( \le T_0 ) 的行为与特征,标签由 (T0,T0+W](T_0, T_0 + W](T0,T0+W]决定
  • 若客户在≤T0\le T_0T0 时间购买行为中使用未来标签窗口的信息,要避免

2.2.5 步骤 5:模型评价指标

  • 二分类常用指标:ROC‐AUC,Precision, Recall, F1‐score
  • 针对业务,也看 Precision@K、Lift(提升率)准则:你可能只对 top-10% 的潜力客户做营销投入
  • 可区分不同阈值设定下的召回 vs 精确度 Trade-off

2.3 模拟未来一个月消费者回购概率模型

2.3.1 Y变量设计

  • 预测目标:预测未来一个月(9月 → 10月)是否回购。
  • Y = 1:用户在预测窗口内至少一次购买。
  • Y = 0:用户在预测窗口内无购买。
  • 正样本选择:所有在预测窗口内有回购的用户。

示例:

用户ID训练窗口内交易预测窗口内交易Y
A1次2次1
B3次0次0

2.3.2 滚动切片设计

切片编号训练时间窗口预测时间窗口
12025-07-01~07-312025-08-01~08-31
22025-07-08~08-072025-08-08~09-07
32025-07-15~08-142025-08-15~09-14

说明:每次训练用过去30天数据预测未来30天回购,步长可设为7天或其他。


2.3.3 滚动切片模拟代码

import pandas as pd
import numpy as np# 模拟用户每日交易数据
dates = pd.date_range("2025-06-01", "2025-09-30")
users = range(1, 101)
data = pd.DataFrame([(u, d) for u in users for d in dates], columns=['user_id', 'date'])
np.random.seed(42)
data['purchase'] = np.random.binomial(1, 0.05, len(data))  # 5%概率购买# 滚动切片参数
train_window = 30
predict_window = 30
step = 7slices = []
start_date = data['date'].min()
end_date = data['date'].max()while start_date + pd.Timedelta(days=train_window+predict_window-1) <= end_date:slices.append({'train_start': start_date,'train_end': start_date + pd.Timedelta(days=train_window-1),'pred_start': start_date + pd.Timedelta(days=train_window),'pred_end': start_date + pd.Timedelta(days=train_window+predict_window-1)})start_date += pd.Timedelta(days=step)pd.DataFrame(slices).head(3)

2.3.4 交叉验证方法

  • 时间序列交叉验证(TimeSeriesSplit)

    • 保持时间顺序,训练集总是早于验证集
    • sklearn示例:
from sklearn.model_selection import TimeSeriesSplittscv = TimeSeriesSplit(n_splits=3)
for train_index, test_index in tscv.split(data):print("TRAIN:", train_index, "TEST:", test_index)

2.3.5 特征泄露风险与案例

  • 易泄露特征

    • 未来购买金额、未来交易次数
    • 未来优惠券使用情况
  • 案例

    • 用“未来30天消费金额总和”作为训练特征 → 模型预测几乎完美,但不可落地
    • 用“优惠券领取后是否使用”预测回购,如果领取在预测窗口内 → 泄露未来信息

4 对比 &实战建议

在实际项目中,要根据你的业务与数据情况来选择哪一种 Y 定义方案:

  • 如果你在供应链里关心 绝对销量 与库存/生产计划,则方案 A1 或 A5 较好
  • 如果销量分布长尾、促销/季节性强,则 A2 或 A3 更稳健
  • 在回购预测中,如果营销预算有限且希望集中资源,则 B2/B3/B4(频次/金额/速度)更合适
  • 若目标是宽泛识别潜在客户,则 B1 简单且覆盖面广

5 公式汇总

为了便于快速应用以下是常见公式:

  • 滞后特征:
    Xlag(k)=Salest−k X_{lag(k)} = Sales_{t-k} Xlag(k)=Salestk

  • 滚动平均:
    Xma(k)=1k∑i=1kSalest−i X_{ma(k)} = \frac{1}{k} \sum_{i=1}^k Sales_{t-i} Xma(k)=k1i=1kSalesti

  • 差分销量:
    ΔSalest=Salest−Salest−1 \Delta Sales_t = Sales_t - Sales_{t-1} ΔSalest=SalestSalest1

  • 对数变换销量:
    Yt=log⁡(Salest+c) Y_t = \log(Sales_t + c) Yt=log(Salest+c)

  • 回购频次阈值标签:
    Y(2)=1  ⟺  Npurchases in (T0,T0+W]≥K Y^{(2)} = 1 \iff N_{\text{purchases in }(T_0, T_0+W]} \ge K Y(2)=1Npurchases in (T0,T0+W]K

  • 回购金额阈值标签:
    Y(3)=1  ⟺  ∑orders∈(T0,T0+W]Amount≥M Y^{(3)} = 1 \iff \sum_{orders \in (T_0, T_0 + W]} Amount \ge M Y(3)=1orders(T0,T0+W]AmountM

  • 回购速度标签:
    Y(4)=1  ⟺  (exists purchase in (T0,T0+W])∧(Δtfirst repeat≤D) Y^{(4)} = 1 \iff (\text{exists purchase in } (T_0, T_0 + W] ) \land (\Delta t_{\text{first repeat}} \le D) Y(4)=1(exists purchase in (T0,T0+W])(Δtfirst repeatD)


五、结语

定义 Y 看起来是一个基础问题,但它实际上蕴含多重业务假设。一个好的 Y 不仅能让模型训练与调参更稳定、预测误差更低,也能确保预测结果被业务方理解、接纳、用于决策。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/98038.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/98038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【 C/C++ 算法】入门动态规划-----一维动态规划基础(以练代学式)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章是动态规划算法的基础入门篇&#xff0c;我将通过三道简单题 一道中等难度的一维动态规划题来带你对动态规划有个初认识&#xff0c;并基本了解动…

深入对比Tomcat与Netty:HTTP请求从网卡到Controller的全链路追踪

我们日常用Spring Boot写的RestController&#xff0c;感觉上就是一个简单的方法&#xff0c;但它背后其实有一套复杂的网络服务在支撑。一个HTTP请求到底是怎么从用户的浏览器&#xff0c;穿过层层网络&#xff0c;最终抵达我们代码里的Controller方法的&#xff1f;理解这个过…

GO学习记录十——发包

记录下不同平台的发包操作和期间遇到的问题 1.命令&#xff1a; $env:GOOSlinux $env:GOARCHamd64 go build -o release/HTTPServices-linux第一行&#xff0c;配置平台&#xff0c;linux、windows 第二行&#xff0c;配置部署服务器的处理器架构 第三行&#xff0c;输出目标文…

贪心算法与动态规划

1. 什么是贪心算法&#xff1f; 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。 核心思想&#xff1a;“每步都贪心地选择眼前最好的&#xff0c;不去考虑整个未来的长…

学会“读网页”:生成式 AI 在足球赛事信息整理中的实战

逐步教程&#xff08;Step-by-Step&#xff09; — 适合初学者与教学类文章 背景&#xff08;为什么要这样做&#xff09; 对于足球迷、资讯编辑与数据分析师来说&#xff0c;最快、最准确把握一场比赛的核心信息至关重要&#xff1a;比分、关键事件&#xff08;进球、点球、红…

BM3D 图像降噪快速算法的 MATLAB 实现

BM3D 图像降噪快速算法的 MATLAB 实现1. 快速 BM3D 算法流程&#xff08;概述&#xff09;步骤操作加速技巧① 分组块匹配 堆叠FFT 互相关② 协同滤波3D 变换 硬阈值FFT 沿第三维③ 聚合加权平均稀疏矩阵累加 2. 核心函数&#xff08;单文件版&#xff09; 保存为 bm3d_fast.…

Go的schedt调度(runtime/proc.go)

1. 创建go的入口函数// Create a new g running fn. // Put it on the queue of gs waiting to run. // The compiler turns a go statement into a call to this. func newproc(fn *funcval) {gp : getg()pc : sys.GetCallerPC()systemstack(func() {newg : newproc1(fn, gp, …

Ubuntu 服务器配置转发网络访问

配置文档&#xff1a;Ubuntu 服务器转发网络访问 一、网络拓扑以以下网络拓扑为示例Ubuntu 服务器&#xff08;两个网卡&#xff09; eth1 10.66.71.222 &#xff08;接入内网&#xff09;eno1 192.168.2.100 &#xff08;直连相机&#xff09; 相机ip 192.168.2.1 Windows 客…

为什么企业需要高防IP

1. 抵御日益猖獗的DDoS攻击 现代DDoS攻击规模已突破Tbps级别 传统防火墙无法应对大规模流量攻击 高防IP采用分布式清洗中心&#xff0c;可轻松抵御300Gbps以上的攻击流量 2. 保障业务连续性 网络中断1小时可能造成数百万损失 高防IP确保服务99.99%可用性 智能切换机制实…

CSS基础 - 选择器备忘录 --笔记5

目录基础选择器组合器伪类选择器属性选择器选择器可以选中页面上的特定元素并为其指定样式。 CSS有多种选择器。 基础选择器 标签选择器 – tagname&#xff1a;匹配目标元素的标签名。优先级是0,0,1。如&#xff1a;p、h1、div类选择器 – .class&#xff1a;匹配class属性中…

自动驾驶中的传感器技术46——Radar(7)

卫星雷达&#xff08;又称为分布式雷达&#xff09;主要讲当前雷达的雷达信号处理计算以及雷达目标相关的一些感知算法都迁移到中央域控进行&#xff0c;雷达端基本只负责数据采集&#xff0c;这样做的影响如下&#xff1a; 雷达端成本与功耗降低&#xff1b; 雷达端采样得到的…

【论文阅读】Diff-Privacy: Diffusion-based Face Privacy Protection

基于扩散模型的人脸隐私保护方法——DiffPrivacy&#xff0c;解决了两类人脸隐私任务&#xff1a;匿名化&#xff08;anonymization&#xff09;和视觉身份信息隐藏&#xff08;visual identity information hiding&#xff09;。1. 研究背景随着人工智能和大数据技术的普及&am…

React 原理篇 - 深入理解虚拟 DOM

一、什么是虚拟 DOM&#xff1f; 在前端开发中&#xff0c;“虚拟 DOM” 是一个高频出现的术语&#xff0c;尤其在 React 生态中被广泛讨论。但很多开发者对它的理解往往停留在 “JS 对象” 这个表层认知上。 实际上&#xff0c;虚拟 DOM 是一种编程概念—— 在这个概念里&…

对汇编的初理解

此处是一个简单的函数&#xff0c;里面将调用了一个函数add&#xff08;&#xff09;函数这里是函数的原型这里是调用lcd函数产生的汇编语言&#xff0c;翻译过来就是r11&#xff0c;r0cnt(r4cnt,前文有提及)&#xff0c;然后调用add函数&#xff0c;此处BL是指会回到指令的下一…

《Python 自动化实战:从零构建一个文件同步工具》

《Python 自动化实战:从零构建一个文件同步工具》 一、开篇引入:为什么我们需要文件同步? 你是否有过这样的困扰: 公司电脑和家里电脑上都有工作项目,每次更新都要手动复制? U 盘频繁传输文件,不仅麻烦还容易出错? 项目文件夹动辄几 G,每次同步都耗时长、效率低? 在…

工业相机与镜头的靶面尺寸详解:选型避坑指南

在机器视觉系统中&#xff0c;相机与镜头的靶面尺寸匹配是一个非常关键却又经常被忽略的细节。选错了&#xff0c;不但影响图像质量&#xff0c;还可能导致画面“黑角”、视野不符、镜头浪费等问题。 今天我们就用通俗易懂的方式&#xff0c;聊一聊相机与镜头靶面尺寸的那些事儿…

使用 Go 和 go-commons 实现内存指标采集并对接 Prometheus

文章目录一、准备工作二、编写内存采集代码三、运行 Exporter四、接入 Prometheus五、可扩展思路总结在运维和监控领域&#xff0c;资源指标采集 是必不可少的一环。CPU、内存、磁盘、网络这些系统资源&#xff0c;需要实时采集并上报到监控系统中。 本文以 内存指标采集 为例&…

webrtc弱网-IntervalBudget类源码分析与算法原理

一、核心功能 IntervalBudget 类用于基于时间窗口的带宽预算管理。它根据设定的目标比特率&#xff08;kbps&#xff09;和一个固定时间窗口&#xff08;500ms&#xff09;&#xff0c;计算在该时间窗口内可用的字节数&#xff08;即“预算”&#xff09;&#xff0c;并支持预…

深度学习基本模块:RNN 循环神经网络

循环神经网络&#xff08;RNN&#xff09;是一种专门用于处理序列数据的神经网络架构。与处理空间数据的卷积神经网络&#xff08;Conv2D&#xff09;不同&#xff0c;RNN通过引入循环连接使网络具有"记忆"能力&#xff0c;能够利用之前的信息来影响当前的输出&#…

React18学习笔记(二) React的状态管理工具--Redux,案例--移动端外卖平台

文章目录一.Redux的基础用法1.示例:普通网页中的Redux计步器2.Redux管理数据的流程3.配套工具和环境准备3.1.配套工具3.2.环境准备4.示例:React项目中的Redux计步器思路步骤step1:创建子模块step2:导入子模块step3:注入store实例step4:React组件内使用store中的数据step5:在组件…