基于Copula函数与K-means算法的风电光伏联合场景生成与削减
做可再生能源研究或者电力系统规划的朋友,应该都有过这种体会:风电和光伏出力都是随机的,单独看一条曲线还好,一旦要把两者放进同一个调度模型或者容量配置模型里,场景怎么来、场景怎么选、选完怎么保证概率合理,每一步都是坑。这两年关于风光联合场景生成与削减的讨论越来越多,核心思路基本收敛到两条线上——用Copula函数捕捉风电和光伏出力之间的相关性结构,再用K-means聚类把成百上千个初始场景压缩成少数几个有代表性的典型场景。
这篇文章就围绕这个组合方案展开,讲清楚为什么需要联合场景、Copula函数在中间扮演什么角色、K-means聚类怎么落地、以及整个流程里最容易被忽略的细节问题。内容偏向工程实现,适合正在做风光出力建模、电力系统随机优化、储能容量配置的同行参考,也适合刚入门但想系统掌握这套方法论的同学。
1. 场景生成与削减:到底在解决什么问题
1.1 单一场景的局限与随机优化的困境
先说一个最朴素的问题:为什么不能直接拿历史数据跑优化模型?
原因其实很现实。历史数据只有一条时间序列,但你未来面临的不确定性是成千上万种可能的组合。比如某天风小但光强,另一天风大但云层厚,这两种情况在历史数据里可能都出现过,但它们对调度决策的影响完全不同。如果你只拿一条典型曲线去跑模型,结果就是优化出来的方案只对这条曲线有效,换个场景可能直接失稳或经济性崩盘。
所以随机优化(stochastic optimization)的基本思路是:生成一批能够代表未来可能性的场景,每个场景带一个概率,然后让决策在这些场景下综合最优。这个过程分两半——前半段是场景生成,后半段是场景削减。场景生成要解决"数量够不够多、分布够不够准"的问题,场景削减要解决"数量太多算不动、需要挑出代表"的问题。
1.2 为什么必须做"联合"场景,而不是单独建模
接下来是另一个关键问题:风电和光伏能不能分开建模、各算各的、最后再拼在一起?
表面上看可以,但实际上有个致命缺陷——出力之间的相关性被切断了。
风电和光伏出力的相关性在物理层面就存在。典型的情况是:白天光照强时,光伏出力大,但风速往往相对较弱(尤其在内陆地区);而夜间风速可能上升,光伏则归零。这种时间互补性如果建模时忽略了,场景里就会频繁出现"白天又风大又光强"这种现实中很少见的组合,或者"晚上又风大又光强"这种根本不可能的组合。
联合场景生成就是要在建模阶段把这种相关性结构嵌入进去。这样一来,生成的场景不仅每个单变量的边缘分布符合历史规律,两个变量之间的联动关系也和现实一致。分布式光伏接入、风电场集中并网的场景下,这种联动关系尤其重要——相关性会影响系统调峰压力、线路潮流分布甚至备用容量配置。
1.3 场景削减的动机:计算代价与场景数量的平衡
生成了初始场景集,一般数量是500到5000个。这个体量扔进混合整数规划(MIP)或者随机动态规划里,求解时间会爆炸式增长,甚至根本解不动。
场景削减就是在保证概率分布特征尽可能接近原始场景集的前提下,把场景数量压缩到5到20个。压缩后的场景集合必须满足两个条件:一是每个场景要有明确的概率值,能直接进入优化模型;二是削减前后场景集在概率分布意义上差异尽可能小。
K-means算法在这里的价值就体现出来了:它可以把相似的出力日归到同一个簇,然后用簇中心(centroid)代表这一类场景,场景概率就是簇内样本数量占总样本数量的比例。思路简单、实现成本低、效果在多数情况下都可接受,这也是它成为场景削减主流工具之一的原因。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Copula函数:捕捉风光相关性的数学工具
2.1 皮尔逊相关系数不够用吗
很多人第一反应是:要描述风电和光伏的相关性,直接用皮尔逊相关系数(Pearson correlation coefficient)不就行了?
这个想法有道理,但不完整。皮尔逊相关系数本质上只能描述两个变量之间的线性相关关系,而且它默认变量的联合分布是椭圆分布(比如正态分布)。风电和光伏出力有个很明显的特征:大量数据点集中在0附近(无出力时段),偶尔有小幅波动,少数时段出力接近额定值——这种分布形态是典型的偏态、厚尾分布,根本不符合正态假设。强行用线性相关系数去描述,会严重低估极端情况下的尾部相关性。
举个例子:风速在切入风速以下时,风电出力恒为0;光伏在夜间出力恒为0。这两个"恒为0"的时段之间存在强相关性吗?皮尔逊相关系数会把它们当作"两个变量同时为0"的相关性来计入,但这种相关性和"风速很高同时光照很好"的尾部相关性完全是两码事。线性相关系数无法区分这种不同层次的相关结构。
2.2 Sklar定理与Copula的核心思想
Copula方法的理论基础是Sklar定理。它的核心思想非常优雅:一个多维随机变量的联合分布函数,可以被拆解为两部分——各个变量自己的边缘分布函数,以及一个描述变量之间依赖结构的函数,后者就是Copula函数。
用数学公式表达就是:
F(x₁, x₂) = C(F₁(x₁), F₂(x₂))
其中F₁和F₂是风电和光伏出力的边缘分布函数,C就是Copula函数。这个分解的工程价值非常大:你可以自由选择最贴合实际数据的边缘分布(不必强求正态),同时独立地选择最合适的Copula结构来描述相关性,两者互不干扰。
Copula函数本质上是在[0,1]均匀分布空间上描述依赖结构。这意味着先把原始出力数据通过概率积分变换(Probability Integral Transform)映射到[0,1]区间,然后在这个均匀空间里分析相关性。这样做的好处是脱离了原始数据的量纲和边缘分布形态,专注研究"纯粹的相关性"。
2.3 常用Copula函数族及其适用场景
实际工程中常用的Copula主要分两大类:椭圆族和阿基米德族。
椭圆族包括Gaussian Copula和t-Copula。Gaussian Copula结构简单、参数少(只有一个相关矩阵),计算方便,适合相关性结构对称、尾部相关性较弱的数据。t-Copula在Gaussian基础上增加了自由度参数,能够捕捉尾部相关性,适合极端事件更容易同时发生的数据。
阿基米德族包括Clayton Copula、Gumbel Copula和Frank Copula,它们各有特点:
- Clayton Copula:对下尾相关性敏感,适合描述"两个变量同时处于低值"的情况。用在风光的场景里,可以理解为"无风且无光"这种双重低谷时段。
- Gumbel Copula:对上尾相关性敏感,适合描述"两个变量同时处于高值"的情况,对应"大风且强光"这种极端高出力场景。
- Frank Copula:适用于相关性整体较弱、没有明显尾部结构的数据。
对于风光出力数据,通常的做法是先用数据拟合多种Copula,再通过拟合优度检验(如AIC/BIC准则、Cramér-von Mises检验)选出最优模型。不要拍脑袋选,要让数据说话。
2.4 Copula参数估计:两阶段估计法详解
Copula参数估计最常用的方法是两阶段估计法(IFM,Inference Functions for Margins)。
第一阶段,估计每个变量的边缘分布参数。对风电出力,常用的边缘分布有Beta分布、Weibull分布、核密度估计(KDE)等。对光伏出力,Beta分布和核密度估计用得较多。参数估计方法可以用极大似然估计(MLE)。
第二阶段,把第一阶段得到的边缘分布参数固定下来,将数据通过概率积分变换转化为[0,1]区间的均匀分布样本,然后对Copula函数的参数进行极大似然估计。
这里面有个细节要注意:边缘分布的选取质量直接决定Copula参数估计的准确性。如果第一阶段边缘分布拟合得不好,第二阶段估计的Copula参数再准也白搭,因为数据变换这一步就已经失真了。我个人建议优先用核密度估计做边缘分布,它对数据形态几乎没有预设假设,比强行套Beta分布或Weibull分布更稳妥,代价只是计算量稍大一些。
3. K-means聚类:把场景从几千个压缩到十几个
3.1 为什么选K-means而不是其他聚类算法
场景削减领域除了K-means,还有层次聚类(Hierarchical Clustering)、模糊C均值(FCM)、K-medoids等算法可选。K-means之所以在工程中用得最多,主要是因为三个原因。
第一是计算效率高。K-means的时间复杂度是O(n·k·t),n是样本数,k是簇数,t是迭代次数。在几百上千个场景量级下,通常几秒钟就能收敛,而层次聚类的复杂度是O(n²·log n),数据量一大就非常吃力。
第二是结果可直接用于优化模型。K-means输出的簇中心天然就是"平均场景",可以直接作为典型场景输入优化模型,不需要额外的后处理。
第三是概率分配直观。每个簇内样本数量除以总样本数量,就是这个簇对应场景的概率,完全不需要额外计算。
3.2 K-means聚类进行场景削减的完整流程
K-means用于场景削减的标准流程如下:
第一步,数据预处理。每个场景是多维的(比如24小时的风电出力和24小时的光伏出力拼成一个48维向量),通常先做归一化处理,把出力量纲统一到[0,1]或[0,额定功率]区间。否则风电和光伏的额定容量差异会直接影响距离计算。
第二步,确定簇数K。这是整个流程中最关键也最主观的一步,后面单独展开讲。
第三步,初始化质心。K-means对初始质心敏感,建议用K-means++初始化策略,避免随机初始化导致收敛到局部最优。
第四步,迭代聚类。重复"分配样本到最近质心"和"更新质心为簇内样本均值"两步,直到质心变化小于阈值或达到最大迭代次数。
第五步,生成典型场景。每个簇的质心就是一个典型场景,每个簇的样本数比例就是该场景的概率。
3.3 轮廓系数与K值选取的实操方法
K值的选取没有万能公式,但工程上有一套相对系统的试错流程。
最常用的是轮廓系数(Silhouette Coefficient)。对每个样本计算轮廓系数,取值范围[-1,1],越接近1表示聚类效果越好。把所有样本的轮廓系数取平均,得到整体聚类质量的评价指标。在K的取值范围内,选择平均轮廓系数最高的K值。
但仅仅看轮廓系数还不够。因为从优化模型的角度,K值越小计算负担越小,K值越大场景代表性越强,实际选K时要在两者之间权衡。我常用的做法是:先跑K=3到K=20的聚类,记录每个K对应的轮廓系数和削减前后的分布差异指标(后面会讲),画两条曲线,选择"轮廓系数较高且分布差异开始趋缓"的拐点位置。
还有一个工程实测经验:对于风光联合场景,K=5到K=10通常就能覆盖最典型的出力模式(比如"大风小光""小光大风""风光双低""风光双高""中等出力"几种典型日形态),K超过15后边际收益会明显下降。
3.4 场景削减效果评价:CP距离与分布差异
削减后的场景集和原场景集在概率分布上的差异需要定量评估,最常用的工具是Wasserstein距离,也叫推土机距离(Earth Mover's Distance,EMD)。
Wasserstein距离的直观理解是:把一种概率分布"搬运"成另一种概率分布,最少需要付出多少代价。相比KL散度,Wasserstein距离有两个明显优势:一是对分布的重叠情况更敏感,二是在两个分布完全不重叠时依然有定义,KL散度会直接趋向无穷大。
在实际操作中,风电光伏场景削减常用的指标之一是CP距离(Canonical Probability Distance),它本质上是Wasserstein距离的一种离散化形式,专门用于比较离散场景集之间的分布差异。我一般计算削减前后场景集的CP距离,结合K值一起看,如果K增加但CP距离降幅很小,说明再加场景数量意义不大了。
3.5 与K-means配套的层次聚类方案对比
简单提一下层次聚类,因为有些场景下它比K-means表现更好。
层次聚类的核心优势是不需要预设K值,可以通过树状图直接观察聚类结构,而且结果稳定、不受初始值影响。缺点是计算复杂度高,数据量大时速度慢。
实际工程中我的建议是:如果场景数量在1000以内、维度不高,可以用层次聚类来做精细削减;如果场景数量超过2000或者维度较高(比如24小时+24小时共48维),优先用K-means。还有一种折中方案——先用K-means粗聚类得到50个簇,再对50个簇中心做层次聚类得到最终10个场景,兼顾速度和精度。
4. 完整流程落地:从历史数据到典型场景
4.1 整体流程设计与各环节衔接
把Copula函数和K-means串起来,完整的流程如下:
- 收集风电场和光伏电站的历史出力数据,清洗异常值,处理缺失数据。
- 分别估计风电和光伏出力的边缘分布,用概率积分变换将数据映射到[0,1]均匀空间。
- 用变换后的数据拟合多个Copula函数,通过拟合优度检验选出最优Copula。
- 从最优Copula中随机抽样,生成大量均匀分布样本(比如2000组)。
- 将均匀分布样本通过边缘分布的逆变换,还原为风电和光伏出力值,得到2000个初始联合场景。
- 对初始场景集做K-means聚类,设定目标簇数K(比如8)。
- 提取每个簇的质心作为典型场景,计算每个簇的样本数比例作为场景概率。
- 计算削减前后场景集的CP距离,验证削减效果。
整个流程中,第2步和第4步是Copula方法的核心,第6步是场景削减的核心,其他步骤更多是数据工程和验证工作。
4.2 数据预处理与边缘分布拟合细节
历史出力数据有两个常见坑必须处理。
第一个坑是零值堆积。风光出力在夜间(光伏)和低风速时段(风电)会出现大量零值,直接拟合Beta分布或Weibull分布会得到畸形的参数。处理方法一般有两种:一种是把数据拆成"零值部分"和"非零值部分"分别建模,再用混合分布描述;另一种是对非零值部分拟合连续分布,零值部分用离散概率表示。第二种方法在Copula框架下更自然——Copula建模的是连续分布,零值概率单独保留,抽样时先按概率决定是否为0,再对非零值部分用Copula抽样。
第二个坑是限电数据。国内很多风电场和光伏电站存在弃风弃光问题,实际出力数据可能不等于理论可发功率,这些数据点会扭曲边缘分布的形状。如果研究目标是"未来并网后的出力特性",建议优先使用理论功率数据,或者在清洗时标记限电时段并单独处理。
4.3 Copula选型的对比实验框架
Copula选型不能只看拟合优度指标,还要结合应用场景判断。我建议做一个简单的对比实验框架:
- 备选Copula族:Gaussian、t、Clayton、Gumbel、Frank,一共5个候选。
- 拟合优度指标:AIC(赤池信息准则)、BIC(贝叶斯信息准则)、Cramér-von Mises统计量。
- 尾部相关性对比:计算经验数据的上下尾相关系数,和各个Copula理论尾部相关系数对比,看哪个最接近。
在风光联合场景中,我实测下来最常见的情况是:Gaussian Copula和Frank Copula在中间区域拟合效果尚可,但尾部表现偏弱;Clayton Copula在描述"风光双低出力"时有优势,适合冬季无风无光的场景;Gumbel Copula适合描述台风过境时"大风伴随多云"等高影响场景,但要看具体数据特征。
还有一种更稳妥的做法——使用混合Copula(mixed Copula),把多个Copula按权重组合起来,权重也作为待估参数。这样可以兼顾不同区域的依赖结构,但模型复杂度上升,参数估计难度加大。对于初学者,我建议先用单一Copula,跑通整个流程,再根据实际效果决定是否引入混合Copula。
4.4 典型场景生成与概率分配的Python实现框架
这里给一个简化的代码框架,大家可以在此基础上扩展:
python复制import numpy as np
from scipy import stats
from sklearn.cluster import KMeans
# 1. 历史数据: wind_hist, solar_hist (形状: n_samples x 24)
# 2. 边缘分布拟合(以Beta分布为例)
wind_params = stats.beta.fit(wind_hist[wind_hist > 0] / wind_capacity)
solar_params = stats.beta.fit(solar_hist[solar_hist > 0] / solar_capacity)
# 3. 概率积分变换
u_wind = stats.beta.cdf(wind_hist / wind_capacity, *wind_params)
u_solar = stats.beta.cdf(solar_hist / solar_capacity, *solar_params)
# 4. 拟合Gaussian Copula(以相关矩阵形式)
# 实际可用copulas库或手动实现
rho = np.corrcoef(np.vstack([u_wind, u_solar]))[0, 1]
# 5. 从Copula抽样
n_scenarios = 2000
z = np.random.multivariate_normal([0, 0], [[1, rho], [rho, 1]], n_scenarios)
u_sim = stats.norm.cdf(z) # 均匀分布样本
# 6. 逆变换得到出力场景
wind_sim = stats.beta.ppf(u_sim[:, 0], *wind_params) * wind_capacity
solar_sim = stats.beta.ppf(u_sim[:, 1], *solar_params) * solar_capacity
# 7. K-means聚类削减
features = np.hstack([wind_sim, solar_sim]) # n_scenarios x 48
kmeans = KMeans(n_clusters=8, init='k-means++', random_state=42)
labels = kmeans.fit_predict(features)
# 8. 典型场景与概率
typical_scenarios = kmeans.cluster_centers_
probs = np.bincount(labels) / len(labels)
这段代码是经过精简的核心框架,实际使用时需要注意几个细节:
第一,零值处理的逻辑没有写进去,实际数据必须加上"零值概率"的判断分支;第二,边缘分布不只是Beta,要根据数据特征选型;第三,K-means聚类前建议做特征标准化,否则光伏和风电的出力幅值差异会主导距离计算。
4.5 从场景生成到优化模型的数据接口设计
生成的典型场景要对接优化模型,数据接口设计很重要。
我一般建议输出成标准表格格式,每一行是场景编号、时间点、风电出力、光伏出力、概率。这样无论是写GAMS、MATLAB还是Python的优化模型,都可以直接读取。具体格式如下:
| 场景编号 | 时间点 | 风电出力(MW) | 光伏出力(MW) | 概率 |
|---|---|---|---|---|
| 1 | 1 | 320.5 | 0 | 0.15 |
| 1 | 2 | 280.3 | 0 | 0.15 |
| ... | ... | ... | ... | ... |
| 2 | 1 | 45.2 | 0 | 0.12 |
注意概率是场景级别的,同一场景内所有时间点的概率相同。如果模型要求每个场景的时序出力是完整的24小时曲线,按场景编号和6|时间点的组合键组织数据即可。
还有一点:如果后续要接入两阶段随机规划(two-stage stochastic programming),建议把场景数据保存为CSV文件,用pandas读取后转成numpy数组,避免在不同工具之间反复转换格式引入错误。
5. 常见坑与调参经验:实测中踩过的雷
5.1 维度灾难问题:24+24维聚类是否合理
把风电和光伏的24小时数据直接拼成48维向量做K-means,这是最常见也最危险的做法。
问题在于,高维空间下的欧氏距离会被"稀释",所有点之间的距离趋向于相近,聚类的区分度大幅下降。而且光伏出力在夜间24个维度里全是0,这些维度在距离计算中毫无区分度,却占据了接近一半的维度空间。
解决思路有两个方向。一个是降维后再聚类,比如先用PCA(主成分分析)把48维降到一个合适的子空间,再做K-means。另一个是改距离度量,比如用动态时间规整(DTW)距离替代欧氏距离,仔细处理时序形状相似性。
我的实测经验是:先用PCA看一下累计方差贡献率,如果前几个主成分能解释80%以上的方差,降维后再聚类效果通常会明显优于直接用原始高维数据。
5.2 K-means聚类不稳定的问题与复现策略
K-means的结果受初始质心影响很大,这一点很多初学者容易忽略。
即使是用K-means++初始化,每次运行结果也可能不同,因为初始化过程本身带随机性。如果你的研究需要可复现的结果(论文、报告或者多方案对比),一定要固定随机种子,并且在文中注明。
更稳妥的做法是多运行几次聚类,比如对同一个K值跑50次,取轮廓系数最高或者簇内误差平方和(SSE)最小的一次作为最终结果。这个"多轮交叉验证"策略可以显著降低K-means陷入局部最优的概率。
我个人的工作习惯是:先固定random_state跑一遍确定K值范围,然后对每个K值跑20次取最优,最后固定最优K和对应的最优random_state,输出最终场景。
5.3 Copula拟合中的数值计算问题
Copula参数估计在数据量大或参数相关性强的场景下,容易遇到数值问题。
最常见的坑是相关矩阵非正定。Gaussian Copula的相关矩阵(correlation matrix)必须满足半正定条件,但如果变量数量多且相关性估计结果不理想,矩阵可能出现负特征值。解决办法可以用特征值修正(把负特征值置为0或很小的正数),或者用Higham算法找到最近的正定矩阵。
另一个坑是边缘分布拟合时,核密度估计在数据边界附近会出现偏差,尤其对光伏出力在0附近和额定容量附近的高密度区域。处理方法是使用反射边界修正(reflection boundary correction),或者用有界核密度估计(bounded kernel density estimation),避免概率密度泄漏到定义域之外。
5.4 场景真实性验证:不能只看拟合指标
Copula拟合优度指标好,不代表生成的场景真实可用。
我这里说的"真实"包含两层含义:一是时序合理性,二是物理可行性。时序合理性指生成的出力曲线不能出现剧烈的跳变(比如前一个小时出力为0,下一个小时直接跳到额定功率),这在实际风速和光照变化中几乎不可能发生。物理可行性指风电出力不能超过额定容量,光伏出力在夜间必须为0,等等。
验证方法除了统计指标,建议还做可视化对比:把典型场景的出力曲线叠加到历史典型日的曲线上,人工检查形态是否合理。这个方法虽然"感觉化",但往往能发现统计指标发现不了的问题。
我在项目中遇到过一种情况:Clayton Copula在拟合指标上非常优秀,但生成的场景里频繁出现"风电和光伏同时接近0"的极端场景,而实际历史数据里这种场景虽然存在但没有这么多。原因是Clayton Copula对下尾相关性的建模过于激进,虽然在统计上和数据吻合,但在物理意义上被放大了。这类问题必须通过可视化才能发现。
5.5 场景削减后的概率校准技巧
K-means聚类后直接用簇内样本比例作为场景概率,在某些情况下会产生偏差。
问题在于:K-means聚类假设每个簇是"球形的"(spherical),但风电光伏场景在特征空间里的分布往往不是典型的球形簇。这意味着簇边缘的样本和簇中心之间的隶属关系是模糊的,用硬聚类(hard clustering)的结果直接把样本归入唯一的簇,会丢失样本属于多个簇的不确定性信息。
一个不错的校准方法是:保留每个样本到各簇中心的距离,用距离的倒数作为隶属度权重,重新计算每个场景的概率。具体做法是先把距离转换为相似度,归一化得到每个样本的软隶属度(soft membership),再汇总得到每个簇的总概率。这个方法在场景削减的文献里有时称为"概率再分配",实测下来可以略微改善削减后场景集的CP距离指标,尤其在K值较小时效果更明显。
不过这个方法也有代价——软隶属度计算比硬聚类慢,而且需要额外的代码逻辑。如果k值在10以上、初始场景数不超过5000,直接用硬聚类比例也足够精确,不必过度工程化。
6. 场景质量问题排查速查表
最后给一个排查清单,实际操作中遇到问题时可以对照检查:
| 问题现象 | 可能原因 | 排查方法与解决建议 |
|---|---|---|
| 生成场景出现负值或超出额定容量 | 边缘分布逆变换时参数错误,或数据有越界值 | 检查逆变换代码、核对边缘分布参数,添加数值截断逻辑 |
| 场景中风电和光伏相关性明显失真 | Copula类型选择不当或参数估计有误 | 绘制QR图(QQ Plot of copula fit)、对比尾部相关系数 |
| 削减后场景形态单一、缺乏代表极端场景 | K值太小,或数据归一化不当 | 增大K值,检查归一化区间,确认是否因零值占比过高导致簇中心偏向"零出力" |
| K-means收敛慢或聚类结果不稳定 | 初始质心选择不当,特征维度太高 | 改用K-means++初始化,PCA降维,固定随机种子 |
| 削减前后场景集CP距离偏大 | 聚类没有保留分布密度特征,或特征权重不合理 | 尝试用软隶属度重分配概率,加权重构特征(如对不同时段赋予权重) |
| 高频小概率场景被完全消除 | K-means本质偏向"多数类" | 检查原始场景集中是否存在频率低但影响大的场景,必要时单独保留并人工归入最近簇 |
这个表是我在实际项目中逐步整理出来的,遇到问题先定位到具体环节,再针对性调整,比反复重跑整条流程高效得多。
整套方案用下来,我的体会是:Copula函数解决了"相关性如何建模"的问题,K-means解决了"场景数量如何压缩"的问题,两者结合刚好覆盖了场景生成与削减的完整链路。但这套组合拳的成败真的不取决于单个环节,而是所有环节的衔接质量。边缘分布拟合不好,Copula参数估计就失真;Copula选型不准,聚类进去的场景分布就偏离历史规律;聚类参数不调优,生成的场景数量再少也缺乏代表性。做这类研究不需要急着上复杂的模型,先把Copula和K-means这套经典组合吃透、调顺,再考虑引入深度生成模型之类的进阶工具也不迟。
