🏆 2026年东三省数学建模联赛(深圳杯)A题完美解决方案:人口分布聚类、影响机制与系统动力学预测全链路建模

2026年东北三省数学建模联赛(采用“深圳杯”赛题)A题的核心聚焦于“人口区域分布、影响因素量化与政策评估”。在人口老龄化与区域人口流动加剧的宏观背景下,如何科学地对人口分布进行分类、精准量化经济与社会影响因素、预测未来人口规模,并进行政策模拟,是国家制定发展战略的核心支撑。

本赛题提供了跨越多年的省际面板数据(如北京市、江苏省、广东省等地的企业数、生产总值、人口结构、教育资源等) 。针对这道涵盖分类、回归、时间序列预测与因果推断的大型综合题目,本文将构建一套从“PCA-Kmeans聚类”到“双向固定效应面板回归”,再到“Leslie矩阵+Logistic多尺度预测”,最后落脚于“双重差分(DID)与系统动力学(SD)政策评估”的全链路完美解决方案。

为了帮助大家在本次比赛中斩获国奖,我们团队熬夜奋战,为大家带来了这篇全网最硬核、逻辑最严密、公式代码最全的全题型完美解析博客!无论你选哪道题,这篇干货都能让你豁然开朗!

👇👇👇

https://download.csdn.net/download/qq_40379132/92829891

https://download.csdn.net/download/qq_40379132/92829890

优惠链接:最下方名片关注回复【东三省】获取优惠


问题一:基于PCA与Ward-Kmeans的多指标人口区域分布无监督聚类

【思路解析】 第一问要求对全国各省份(或地市)的人口区域分布进行类别划分。由于单纯依靠人口数量与年龄结构无法解释人口集聚的内在驱动力,我们必须引入经济(如地区生产总值、第三产业比重)、社会(如医疗卫生机构数、教育经费)与环境等外生变量构建多维指标体系 。

数据存在量纲差异与多重共线性,因此建模遵循以下闭环:

  1. Z-score标准化:消除绝对数值带来的量纲影响。

  2. 主成分分析(PCA)降维:提取累计方差贡献率超过85%的核心主成分,剔除冗余信息 。

  3. Ward层次聚类与K-means结合:利用Ward法绘制树状图确定最佳聚类簇数 $K$,随后将该聚类中心作为K-means的初始质心进行迭代优化,确保分类的科学性与可解释性 。

【数学模型与公式】

【核心代码实现】

Python

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 假设 df 为包含各省份人口、经济、教育等特征的数据集
features = ['population', 'gdp', 'edu_funds', 'urban_ratio', 'medical_inst']
X = df[features].values

# 1. Z-score 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 2. 主成分分析 (PCA) 降维
pca = PCA(n_components=0.85) # 保留85%以上的方差
X_pca = pca.fit_transform(X_scaled)
print(f"保留的主成分个数: {pca.n_components_}")

# 3. K-means 聚类 (假设通过Ward法确定最佳K=4)
kmeans = KMeans(n_clusters=4, init='k-means++', random_state=42)
clusters = kmeans.fit_predict(X_pca)
df['Cluster'] = clusters

# 输出聚类特征画像
for k in range(4):
    print(f"--- 类别 {k} 的特征画像 ---")
    print(df[df['Cluster'] == k][features].mean())

问题二:不同类别人口数量影响因素的双向固定效应面板回归与弹性分析

【思路解析】 第二问要求探究不同类别中,人口数量影响因素的变化特征与量化贡献 。我们将影响因素拆分为自然增长机制(出生率、医疗水平、老龄化)与机械增长机制(人均GDP差距、产业结构、房价与教育资源吸引力) 。

为了剥离随时间变化的宏观冲击(如国家生育政策变动)和不随时间变化的省份个体特征(如地理位置),我们对每个聚类类别分别建立双向固定效应面板数据模型(Two-way Fixed Effects Panel Model)

【数学模型与公式】

【核心代码实现】

import statsmodels.api as sm
from linearmodels.panel import PanelOLS

# 设定多重索引 (省份, 年份) 构建面板数据
df_panel = df.set_index(['province', 'year'])

# 对目标类别提取子集并取对数
df_sub = df_panel[df_panel['Cluster'] == 1].copy()
df_sub['ln_pop'] = np.log(df_sub['population'])
df_sub['ln_gdp'] = np.log(df_sub['gdp'])
df_sub['ln_edu'] = np.log(df_sub['edu_funds'])
df_sub['ln_med'] = np.log(df_sub['medical_inst'])

# 构建双向固定效应面板模型
exog_vars = ['ln_gdp', 'ln_edu', 'ln_med']
exog = sm.add_constant(df_sub[exog_vars])
mod = PanelOLS(df_sub['ln_pop'], exog, entity_effects=True, time_effects=True)
res = mod.fit(cov_type='clustered', cluster_entity=True)

print("--- 类别1 的面板回归与弹性分析结果 ---")
print(res.summary)

问题三:多尺度融合的分类别人口数量预测(Leslie矩阵 + Logistic模型)

【思路解析】 第三问要求对未来5年、10年、30年的人口进行预测 。人口系统具有极强的惯性与非线性,单一模型极易失效。我们必须采用**“时间尺度分层”**的混合预测架构 :

  1. 短期预测(5年):人口惯性起主导作用,适合使用 ARIMA 或灰色预测 GM(1,1) 模型捕获趋势 。

  2. 中期预测(10年):年龄结构的变动开始显现。采用 Leslie矩阵预测模型,精确追踪不同年龄组的存活率与生育率演化 。

  3. 长期预测(30年):资源承载力与经济天花板成为核心限制。采用考虑环境容量的 Logistic 阻滞增长模型,并对于某些人口收缩型城市(如东北地区)引入反向指数衰减模型 。

【数学模型与公式】

【核心代码实现】

import numpy as np
from scipy.optimize import curve_fit

# 1. 长期预测:Logistic 阻滞增长拟合
def logistic_model(t, K, P0, r):
    return K / (1 + (K/P0 - 1) * np.exp(-r * t))

# 假设具有历史时间 t (0到30) 和历史人口 pop_hist
t_hist = np.arange(len(pop_hist))
# 预估初始参数 [K, P0, r]
p0 = [max(pop_hist)*1.2, pop_hist, 0.05]
popt, _ = curve_fit(logistic_model, t_hist, pop_hist, p0=p0, maxfev=10000)

K_opt, P0_opt, r_opt = popt
print(f"拟合得到的人口容量极限 K={K_opt:.0f}, 内生增长率 r={r_opt:.4f}")

# 预测未来30年
t_pred = np.arange(len(pop_hist), len(pop_hist) + 30)
pop_pred = logistic_model(t_pred, K_opt, P0_opt, r_opt)

# 2. 中期预测:Leslie 矩阵 (示意)
# 假设分为 0-14, 15-64, 65+ 三个组别
L = np.array([0.0, 1.2, 0.0],  # 仅劳动力组具备主要生育率
    [0.9, 0.0, 0.0],  # 0-14存活至15-64的概率
    [0.0, 0.8, 0.0]   # 15-64存活至65+的概率
])
pop_vector = np.array() # 初始各年龄段人数
for year in range(10):
    pop_vector = np.dot(L, pop_vector)

问题四:分类别政策设计与效果的双重差分(DID)及系统动力学模拟

【思路解析】 最后一问是决策智库的体现,要求提出发展支持政策并量化其影响 。不同类别区域的病灶不同:对于老龄化与收缩型地区(如东三省),政策需聚焦于“银发经济”与人才回流;对于超大城市核心区,需聚焦降低居住成本与普惠托育 。

为了实现“量化影响”,我们必须给出**“反事实预测(Counterfactual Prediction)”——即有政策干预与没有政策干预的对比 。这可以通过构建双重差分(Difference-in-Differences, DID)计量模型提取历史政策的净效应系数,随后将其输入到系统动力学(System Dynamics, SD)**模型中,模拟政策强度(如每年增加100亿教育投资)在复杂因果链条中的级联放大效应 。

【数学模型与公式】

【核心代码实现】

# 政策效果反事实仿真 (Counterfactual Simulation)
import matplotlib.pyplot as plt

years = np.arange(2025, 2056)
pop_baseline = logistic_model(years - 2025, K_opt, P0_opt, r_opt)

# 假设DID模型测算出,普惠托育补贴政策使生育率每年提升 0.002
# 产业扶持政策使城市人口承载极限 K 提升 15%
policy_effect_r = 0.002
policy_effect_K = K_opt * 1.15

# 带政策干预的系统动力学更新
pop_policy = logistic_model(years - 2025, policy_effect_K, P0_opt, r_opt + policy_effect_r)

plt.figure(figsize=(10, 6))
plt.plot(years, pop_baseline, label='基准情景 (无政策干预)', linestyle='--', color='gray')
plt.plot(years, pop_policy, label='政策干预情景 (普惠托育+产业扶持)', color='blue', linewidth=2)
plt.fill_between(years, pop_baseline, pop_policy, color='blue', alpha=0.1, label='政策净效应增量')
plt.title('2026-2055年分类别发展支持政策反事实模拟评估')
plt.xlabel('年份')
plt.ylabel('预测人口规模')
plt.legend()
plt.grid(True)
plt.show()

结语:建模的终极艺术在于“机理驱动与数据验证的统一”

面对2026年东三省数学建模联赛(深圳杯)A题,这不仅是对数据的简单清洗和套用模型,更是一次针对国家级人口战略的深度推演。

本文通过无监督的 PCA-Kmeans 发现了数据背后的聚类图谱;通过面板回归与弹性分析找到了驱动人口机械与自然增长的底层密码;通过多尺度预测模型(Leslie + Logistic)穿越了长期的时间迷雾;最终通过反事实的系统动力学(SD)与双重差分评估交出了一份极具说服力的智库级政策答卷。

掌握并将这种包含统计推断、时序预测和因果分析的“全链路组合拳”落地,正是我们在高水平竞赛中脱颖而出的致胜法宝!预祝各位参赛团队在本次比赛中勇夺桂冠!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐