You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理人口数据中的数位输入错误(附异常值检测实践)

人口数据数位输入错误的处理方案

针对世界银行195个国家15年人口数据中出现的数位输入错误(如少输入一位数导致数据为真实值的1/10),在已通过对数转换+Z-score识别出异常值的基础上,可采用以下实用处理方案:

一、定向修正10倍量级异常

这类错误的典型特征是异常值为真实值的1/10,可通过趋势验证后直接修正:

  • 先验证异常值乘以10后,是否符合该国人口的增长逻辑(比如与前后年份的增长率处于合理区间,通常人口年增长率在0%-3%)
  • 符合条件则直接将异常值替换为原值×10

示例代码:

# 遍历识别出的异常值,验证后修正
for idx, row in outliers.iterrows():
    corrected = row['Population'] * 10
    # 获取前后年份数据用于趋势验证
    prev_pop = afg_data.at[idx-1, 'Population'] if idx > 0 else None
    next_pop = afg_data.at[idx+1, 'Population'] if idx < len(afg_data)-1 else None
    
    # 验证增长率是否在合理范围(这里设为0%-5%,可根据地区调整)
    valid = False
    if prev_pop:
        growth_rate = (corrected - prev_pop) / prev_pop
        valid = 0 <= growth_rate <= 0.05
    if next_pop and not valid:
        growth_rate = (next_pop - corrected) / corrected
        valid = 0 <= growth_rate <= 0.05
    
    if valid:
        afg_data.at[idx, 'Population'] = corrected

二、上下文插值补充

若无法确定是否为10倍错误(比如异常值不符合×10后的趋势),可利用相邻年份数据插值:

  • 线性插值:适合人口增长平稳的时期
  • 指数插值:更贴合人口自然增长的指数趋势

示例代码:

# 先将异常值设为NaN,再进行指数插值
afg_data.loc[outliers.index, 'Population'] = np.nan
afg_data['Population'] = afg_data['Population'].interpolate(method='index')

三、参考组均值修正

如果某国连续多年数据异常,或无相邻有效数据,可参考同属性组(如同一地区、同一收入水平)的同期人口增长率,结合该国已知的基准数据计算修正值:

  1. 计算同组国家的平均年增长率
  2. 用该国前一个有效年份的数据,乘以(1+平均增长率)得到修正值

四、事后验证机制

  • 可视化校验:绘制修正后的人口增长折线图,确认趋势连续无突兀波动
  • 增长率校验:计算所有年份的人口增长率,过滤超出合理范围(如<-1%或>5%)的数值,再次核查

内容的提问来源于stack exchange,提问作者Yugang1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:55:58