×
¥
查看详情
🔥 会员专享 文生文 数据处理

数据清洗计划器

👁️ 426 次查看
📅 Dec 1, 2025
💡 核心价值: 该提示词基于用户提供的数据集概述,生成结构化、可执行的数据清洗计划(含字段检查、缺失/异常处理、类型转换、去重、标准化、采样策略与交付物)。输出以技术写作风格呈现,强调步骤可复现、所需输入字段和验收指标,便于工程实施与审计。所有结论仅基于用户输入数据。

🎯 可自定义参数(4个)

数据集概述
用户对数据集的简要说明,包括来源、包含表或文件名、主要字段或列名列表、每列样例值、是否为时序数据等信息
期望交付物
期望的交付物类型,指定数据清洗后需要生成的具体输出形式
关键字段与主键
列出被视为主键或关键识别字段,以及哪些字段为目标变量(若有)
样本量与时间窗
说明数据覆盖的时间范围与可用样本量(行数),或注明是否需按时间切片或采样策略

🎨 效果示例

数据清洗与统一宽表构建计划

目标

  • 从 ODS 增量导出的 CSV 构建一张统一宽表(主键:order_id + item_id),解决已知质量问题并保证主外键一致性、时区统一、枚举规范与金额口径统一。
  • 提供可重复、可审计的清洗流程,支持10%稳定样本的干跑与全量上线。

数据来源与分区

  • 读取路径:s3://retail/exports/2023-2024
  • 文件:orders.csv, order_items.csv, customers.csv, payments.csv
  • 分区策略:按文件日期目录或文件名标识;若无明确分区列,使用加载批次时间作为技术分区。保持每日增量的幂等处理(同一订单重复导出不重复入库)。

处理框架与执行模式

  • 推荐使用 Spark(或等价分布式引擎)读取 CSV(UTF-8, comma),withHeader=true,mode=PERMISSIVE。
  • 流程分层:raw_staging → cleaned_conformed → wide_table
  • 幂等性:以业务键作去重与 upsert,保留历史审计字段(_source_file, _load_ts, _row_hash)。

统一数据类型与模式(进入 cleaned_conformed 前)

  • IDs:全部转为字符串(string),去除首尾空格,保持大小写原样或统一大写(建议大写);验证前缀格式:
    • order_id: ^O\d{8}-\d{6}$
    • customer_id: ^C\d+$
    • payment_id: ^P-\d{8}-\d+$
  • 时间:order_time, pay_time → 先 trim,再多格式解析;强制解析为带时区的时间戳,统一到 UTC(新增列 _utc),保留原始偏移(_tz_offset)。非法日期置为 null 并记录错误代码。
  • 数值:order_amount, discount_amount, unit_price, tax, qty, paid_amount, fx_rate → cast 为 decimal(18,2) 或适用精度;负值与异常值进入校验规则。
  • 枚举:status, currency, channel, device, pay_method, shipping_country, province → 统一大小写与标准字典(见下)。

标准化字典与清洗规则

  • status 统一为小写且限集合 {paid, shipped, canceled}
    • 映射:(?i)shipped → shipped;(?i)paid → paid;(?i)canceled|cancelled → canceled;其他置为 null 并告警
  • currency 统一为 ISO 4217 大写(CNY, USD)。异常值置为 null 并告警。
  • shipping_country 统一为 ISO-3166 alpha-2:CN, US
    • 映射:(?i)china → CN;usa|united states → US;大小写不敏感
  • device 统一集合 {ios, android, web};其他置为 unknown 并记录。
  • province 标准化:去空格、转大写;中国省份使用约定编码(例:FJ 对应 Fujian)。若与邮编冲突,依据邮编校正(见地址校验)。

时间与时区处理

  • 输入可能混用 +00:00 与 +08:00;统一转换为 UTC:
    • order_time_utc = to_utc_timestamp(order_time)
    • pay_time_utc = to_utc_timestamp(pay_time)
  • 移除尾随空格;多格式解析(如 "yyyy-MM-dd HH:mm:ssXXX"),失败置 null。
  • 下游切片与评估使用 UTC。保留原始字符串供审计(*_raw)。

去重与主键一致性

  • orders 重复行:
    • 步骤1:先做枚举与字段标准化(特别是 status)。
    • 步骤2:exact-duplicate 去重:以完整行 hash(除技术字段)去重。
    • 步骤3:near-duplicate(同一 order_id 出现多行):保留优先规则:
      • 先选最大 order_time_utc
      • 如并列,按 status 优先级 shipped > paid > canceled
      • 再并列,选数据质量分最高的记录(非空字段更多、金额与类型校验通过)
    • 记录合并日志(每个 order_id 合并前后行数)。
  • order_items 复合主键:order_id + item_id
    • 去重:partition by (order_id, item_id) 按数据质量分高者保留(unit_price 合法优先;时间靠近订单时间优先)。
  • customers 主键:customer_id → 去重保留最新 signup_date 或数据质量分高者。
  • payments 主键:payment_id → exact-duplicate 去重;跨 payment_id 的同一 order_id 聚合时保留所有有效支付(见金额口径)。

金额与币种统一

  • 定义口径:
    • order_currency = 标准化后的 orders.currency
    • payment_currency = 标准化后的 payments.txn_currency
    • paid_amount_sum = Σ paid_amount(仅支付记录 fx_rate>0 且时间合法)
    • amount_in_order_ccy = 若 payment_currency=order_currency → paid_amount;否则 paid_amount * fx_rate(fx_rate 为 txn to order_ccy 的比率)
      • fx_rate=1.00 为同币保证;fx_rate≤0 或 null → 标记无效,暂不换算,纳入异常统计
  • total_net_amount(订单级):order_amount - discount_amount
    • 校验1:order_amount ≥ 0 且 discount_amount ≥ 0 且 total_net_amount ≥ 0
    • 校验2:与 Σ(line_amount) 比较(允许容差,例如绝对差 ≤ 0.05),差超限告警
  • item 行金额:
    • line_unit_price = unit_price 如果 unit_price > 0;若 unit_price=0,视为赠品(line_amount=0);若 unit_price<0 标记异常(line_amount=null,不纳入合计)
    • line_amount = line_unit_price * qty;qty 必须为正整数(≤0 置为异常)
  • 多支付订单:
    • payments_agg:按 order_id 聚合 sum_paid_in_order_ccy、latest_pay_time_utc
    • 若存在跨币支付且 fx_rate 合规,按规则累计;否则剔除异常支付并告警

地址与地理校验

  • postal_code 标准化:trim、去空格、仅保留字母数字;中国邮编校验为6位数字;美国邮编 5位或 ZIP+4。
  • province 与 postal_code 一致性:
    • 若 shipping_country=CN:
      • 建立邮编前两位至省份映射表(如 35 → 福建/FJ)并校验
      • 若不一致:若 postal_code 合法且 province 缺失或非合法编码→按邮编纠正 province;否则置 postal_code 为 null
    • 非 CN:保留原值,最小校验(长度与字符集)。
  • 记录纠正与失败数量,输出问题清单。

主外键与参照完整性

  • 键类型统一为 string;去除空格与控制字符。
  • 外键校验:
    • order_items.order_id 必须存在于 orders
    • payments.order_id 必须存在于 orders
    • orders.customer_id 必须存在于 customers
  • 处理策略:
    • 孤儿行(无主表匹配)不进入宽表;输出孤儿清单用于回补
    • 多客户同一 order_id(异常)以合并规则选定一条,记录冲突

枚举与值域校验

  • status ∈ {paid, shipped, canceled};否则置 null 并标记 invalid_status
  • channel ∈ {web, app};device ∈ {ios, android, web};非法值归类 unknown
  • pay_method ∈ {wechat, alipay, card};非法值置 unknown
  • shipping_country ∈ {CN, US}
  • currency ∈ {CNY, USD}

非法与缺失处理

  • 非法日期 → null,后续派生字段依赖时按缺失处理
  • 负数单价或税 → line_amount=null,标记 invalid_unit_price
  • qty ≤ 0 → 行剔除或标记 invalid_qty(建议剔除,保留审计)
  • fx_rate ≤ 0 或 null → 该支付不参与币种换算,标记 invalid_fx
  • email_hash、phone_mask:保留原值,不反解;空值允许

联合与宽表构建

  • 以 order_items 作为明细锚表(确保主键 order_id + item_id)
  • 连接:
    • items JOIN orders ON order_id
    • JOIN customers ON customer_id
    • LEFT JOIN payments_agg(按 order_id 聚合支付)ON order_id
  • 输出字段(建议):
    • 键:order_id, item_id, customer_id
    • 时间:order_time_utc, order_time_tz_offset, latest_pay_time_utc
    • 状态与渠道:status_std, channel_std, device_std
    • 地理:shipping_country_std, shipping_city, province_std, postal_code_std
    • 金额:
      • order_currency, payment_currency
      • order_amount, discount_amount, total_net_amount
      • qty, unit_price_clean, line_amount
      • paid_amount_sum_in_order_ccy, paid_amount_sum_raw
    • 分类:category, brand_clean("NA" → null)
    • 质量标记:invalid_unit_price, invalid_qty, invalid_fx, invalid_status, address_fix_applied
    • 审计:_source_file, _load_ts
  • 目标变量:
    • delivered_7d:需依赖发货与签收时间;当前数据不含签收时间,置为 null,预留字段与计算逻辑接口
    • total_net_amount:已计算

抽样与上线策略

  • 干跑样本(10%):对 orders 按稳定哈希采样(md5(order_id) % 10 = 0),联动过滤 items/payments/customers(仅保留关联到样本订单的记录)。
  • 验证留出集:2024-06 为留出时间窗(按 order_time_utc 切片)用于时序外推验证。
  • 加速验收:可在宽表上抽取近90天进行指标对比。
  • 上线前对比指标:重复行数量、非法日期率、枚举标准化覆盖率、币种一致率、地址纠正率、孤儿行比例、金额一致性(订单金额与明细合计的差异分布)。

数据质量规则与阈值(示例)

  • orders 去重后主键唯一率 ≥ 99.99%
  • 非法日期占比 ≤ 0.1%
  • status 可识别率 ≥ 99.5%
  • shipping_country 标准化成功率 ≥ 99.9%
  • unit_price<0 的行占比 ≤ 0.05%,全部标记并排除金额聚合
  • postal_code-省份一致性纠正成功率 ≥ 95%(限 CN)
  • 外键完整性(items→orders, payments→orders, orders→customers)≥ 99.9%

异常与日志

  • 按类型输出异常清单:重复订单、非法日期、地址冲突、金额异常(商品合计与订单差超限)、孤儿记录、币种/汇率异常。
  • 每日运行生成质量报表,含关键指标与较上一周期的变化。

示例清洗伪代码(SQL/Spark 混合表达)

  • status 标准化:
    • status_std = lower(trim(status));
    • CASE WHEN status_std IN ('paid','shipped','canceled') THEN status_std ELSE null END
  • 时间统一到 UTC:
    • order_time_utc = to_utc_timestamp(parse_ts(trim(order_time)), extract_tz(order_time))
  • 国家标准化:
    • shipping_country_std = CASE WHEN ilike(shipping_country,'china') THEN 'CN' WHEN ilike(shipping_country,'usa') OR ilike(shipping_country,'united states') THEN 'US' ELSE upper(trim(shipping_country)) END
  • orders 去重:
    • 使用窗口:ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY order_time_utc DESC, status_rank DESC, dq_score DESC) = 1
  • payments 聚合到订单:
    • payments_agg AS SELECT order_id, SUM(CASE WHEN fx_rate>0 AND txn_currency=order_currency THEN paid_amount WHEN fx_rate>0 AND txn_currency<>order_currency THEN paid_amount*fx_rate ELSE 0 END) AS paid_amount_sum_in_order_ccy, MAX(pay_time_utc) AS latest_pay_time_utc FROM payments_clean GROUP BY order_id

性能与资源

  • 规模:~1.2M orders, ~3.6M items, ~1.25M payments, ~0.54M customers;单次全量可由中小型 Spark 集群轻松处理。
  • 联结策略:对 orders 与 payments_agg 先行广播(若尺寸允许),items 为事实表驱动;对 keys 建立分桶或适度 repartition(按 order_id)。
  • 使用列裁剪与谓词下推;采样运行时启用 cache 以稳定验证。

交付物

  • cleaned_conformed.*(4张清洗后中间表)
  • wide_table.orders_items_fact(统一宽表,主键 order_id + item_id)
  • 质量报表与异常清单(CSV/JSON),含去重、枚举规范化、地址纠正、金额一致性与外键完整性指标
  • 运行日志(含源文件列表、行计数、失败原因聚合)

备注

  • delivered_7d 需补充发货与签收时间后计算:delivered_7d = (delivered_time_utc - shipped_time_utc) ≤ 7 天。
  • 汇率若未来改为独立表(按日/交易级),以支付时间对齐并替换 payments.fx_rate。当前仅使用支付记录内 fx_rate。

数据清洗计划(BMS 物联网数据,UTC 对齐与分钟级重采样)

目标

  • 产出对齐后的时间序列数据(1 分钟等频,设备×时间长表为主,另提供 5 分钟重采样版本)。
  • 统一时间到 UTC,消除重复与时间漂移,修复或标记异常与缺失。
  • 与设备元数据与外部气象数据按分钟对齐。
  • 在清洗后构造派生目标 power_kw_next_15min。
  • 提供可复现的质量度量与规则验证流程。

总体原则

  • 所有清洗均应保留审计线索:保留原值列或质量标记列以支持回溯。
  • 优先使用保守修复:无法可靠修复的值设为缺失并标记。
  • 时间规则以 UTC 为基准,读数级主键为 device_id + ts_utc。
  • 对插值设置明确的最大连续缺失长度阈值,不跨越长缺口、不跨越设备边界。
  • 干跑阶段先在 5 台设备两周数据验证规则与阈值,再推广到全量。

数据读取与类型规范

  • 按 dt=YYYY-MM-DD 读取 sensor_readings.parquet;读取 device_meta.csv 与 weather.csv。
  • 统一字段类型:
    • 时间: ts, ingest_time, weather.timestamp_utc -> 时间戳类型(ISO 8601 解析)。
    • 标识: device_id -> 字符串。
    • 数值(若被存为字符串):temp_c, humidity_pct, co2_ppm, pressure_pa, fan_speed_pct, power_kw, tz_offset, seq -> 转为数值。对含单位/逗号的字符串进行正则清洗(如 "45,2" -> 45.2;剔除 "ppm"/"%" 等单位)。
    • status -> 分类(ok, fault, offline)。
  • 校验 sampling_period_s(来自 device_meta),若缺失以60s为默认并在质量标记中记录。

时间规范化与对齐

  • 统一计算 ts_utc:
    1. 若 ts 带 Z(UTC)或显式时区偏移(±HH:MM),按其自带时区解析为 UTC。
    2. 若 ts 为“天真本地时间”(无时区),且 tz_offset 存在:ts_utc = ts - tz_offset。
    3. 若 ts 为天真时间且 tz_offset 缺失:采用站点默认偏移(+08:00),并在质量标记中记录默认规则生效。
  • 校验时间合理性:
    • 计算 ingest_lag_s = ingest_time - ts_utc。
    • 规则:ingest_lag_s < 0 视为时钟错误,设质量标记并保留;0–180s 正常;180–600s 延迟;>600s 视为陈旧数据(建议丢弃或仅保留状态,不用于建模)。
    • 统计每设备的时间漂移(ts_utc 间隔的分布),若大量偏离 60s,记录并在后续重采样时按规则处理。
  • 构造分钟级索引:
    • minute_ts = floor(ts_utc 到分钟) 作为重采样锚点。
    • 输出数据的时间范围覆盖 2024-01-01 00:00:00 UTC 至 2024-03-31 23:59:00 UTC 全部分钟。

重复与序列规则

  • 针对每 device_id + ts_utc 的精确重复:
    • 首选保留 seq 最大的记录;若 seq 不可靠则保留 ingest_time 最新的记录。
    • 若不同记录 status 不同,优先级 ok > fault > offline;但保留 status 字段以供分析。
    • 合并质量标记:记录重复发生次数与保留策略。
  • 对同一分钟内多个读数:
    • 若 ts_utc 同一分钟且不完全相同,则在重采样阶段取近 minute_ts 的记录;若多个同等近,则按上述规则(seq 最大、ingest_time 最新)选一。

设备编号复用与标识修正

  • 识别 device_id 复用(同一 device_id 在时间上出现不可解释的楼层/区域变化或统计结构断点):
    • 结构断点检测:对 power_kw、fan_speed_pct 的中位数与方差进行滚动比较(例如 1 天窗口);出现显著跃迁且持续(>12小时)视为段边界。
    • 可选:结合 device_meta(model, calibration_offset_c, sampling_period_s)及 zone/floor 异常变化。
  • 分段与标识:
    • 为复用设备创建 device_key = device_id + segment_id(segment_id 随时间段递增)。
    • 读数级主键仍为 device_id + ts_utc 以满足业务要求,但在分析/建模建议使用 device_key + ts_utc。
    • 在输出中提供 device_key 与 segment边界时间,供下游过滤。

数值清洗与范围校验

  • 通用规则:
    • 若 status=offline:数值字段置为缺失(NaN),保留 status。
    • 负值校验:power_kw、co2_ppm、pressure_pa 不允许负值;出现负值设为 NaN 并标记。
    • 合理范围(用于硬阈值剔除与标记,具体上限在干跑阶段可微调):
      • temp_c: [-40, 80];-273 视为哨兵值,设 NaN。
      • humidity_pct: [0, 100],超过范围进行截断并标记;较大段缺失单独处理。
      • co2_ppm: [250, 10000](室内常见 400–2000),越界设 NaN。
      • pressure_pa: [90000, 110000],越界设 NaN。
      • fan_speed_pct: [0, 100],越界截断并标记。
      • power_kw: >=0;过大尖峰使用鲁棒方法检测。
  • 传感器校准与异常过滤:
    • 温度应用校准:temp_c_adj = temp_c + calibration_offset_c(来自 device_meta)。
    • 尖峰与异常检测:
      • Hampel(鲁棒 z-score)滤波:窗口 15 分钟,阈值 3σ,应用于 temp_c_adj、co2_ppm、power_kw。检测到尖峰时将值设为 NaN 或替换为窗口中位数(建议设 NaN 并在重采样阶段可选插值)。
      • 明显物理不可能值直接设 NaN。
  • 字段级质量标记:
    • 为每数值列添加 flags:is_outlier、is_clipped、is_negative、is_sentinel、from_interpolation、from_ffill 等布尔标记或分类。

缺失段处理与插值策略(1 分钟频率)

  • 缺失定义:重采样后无观测或被清洗为 NaN。
  • 插值上限(每设备每变量):
    • temp_c_adj、co2_ppm、pressure_pa、fan_speed_pct:线性插值最大缺口 30 分钟;超过保留 NaN。
    • humidity_pct:因成段缺失,线性插值最大缺口 15 分钟;超过保留 NaN。对于>2小时的缺口不插值、不前向填充。
    • power_kw:为模型目标保守处理,线性插值最大缺口 15 分钟;超过保留 NaN,避免不真实能耗信号。
  • 前向/后向填充使用限制:
    • 不对 power_kw、co2_ppm 使用长距离前向填充;仅在 ≤5 分钟缺口时允许一次性 FFill。
    • 不跨越 status=offline 段进行填充或插值。
  • 插值边界:
    • 不跨设备分段(device_key)边界插值。
    • 不跨日界限进行长距离插值(>1小时的缺口不跨日)。

分钟重采样与聚合

  • 建立设备×分钟的网格:
    • 对每个 device_id 或 device_key,在全时间窗生成完整分钟索引。
    • 对同一分钟有多个观测:优先近 minute_ts 的原始点;若需要聚合(极少数情况),使用中位数。
  • 状态聚合:
    • 同一分钟内存在不同 status,取最差状态(offline > fault > ok),用于质量标记,不覆盖原始读数。
  • 输出两个版本:
    1. 1 分钟等频长表:device_id, device_key, minute_ts, temp_c_adj, humidity_pct, co2_ppm, pressure_pa, fan_speed_pct, power_kw, status, 各质量标记。
    2. 5 分钟重采样:在 1 分钟版本基础上取滚动或间隔聚合:
      • 数值字段:中位数或均值(power_kw建议均值),窗口对齐到 5 分钟边界。
      • 标记字段:若窗口内任一 is_outlier/is_offline 为真,则该聚合点标记为受影响。

气象数据对齐

  • weather.timestamp_utc 取整到分钟,与 minute_ts 左连接。
  • 气象缺失处理:
    • 允许前向填充 ≤30 分钟;超过范围保留 NaN。
    • 不进行跨天填充。
  • 可选派生(如需):室外露点或焓值用于质量分析,但不强制输出。

目标变量构造

  • power_kw_next_15min = shift(power_kw, -15 分钟) 在每设备(或 device_key)上计算。
  • 构造前提:
    • 严禁跨设备或跨分段移位。
    • 若当前或未来 15 分钟内存在 NaN 或 status=offline,target 标记为不可用(target_valid=false)。
  • 训练集建议:仅使用 target_valid=true 且过去 30 分钟内插值比例低的样本。

质量度量与验收标准

  • 干跑阶段(5 台设备×两周)输出以下指标:
    • 重复率:去重前后相同 device_id+ts_utc 的重复比例;期望去重后重复为 0。
    • 时间漂移:与 60s 偏差的分布与比例;大于 ±5s 的比例;用于评估采集稳定性。
    • 异常/哨兵剔除率:各字段被设为 NaN 的比例与原因分解。
    • 插值覆盖率:各字段插值占比与平均缺口长度(不超过设定阈值)。
    • ingest_lag 分布:>600s 的比例;若显著,确认丢弃策略。
    • 设备分段检测:产生的 segment 数量与断点合理性(人工抽样核查)。
  • 全量运行验收:
    • 1 分钟版本:对齐矩阵行数≈设备数×时间分钟数;与预估规模一致(≈30×24×60×91)。
    • 丢弃比例控制:因陈旧与严重异常被丢弃的行数不超过 2%(阈值可根据干跑结果调整)。
    • 目标变量有效样本:target_valid 的比例报告与分布。

实现与运维要点

  • 计算框架:
    • 建议使用 Spark(PySpark)进行读取与初步清洗(分区并行、去重、时间标准化),再导出到 Parquet。
    • 频率对齐、插值与派生可在 Spark 或 Pandas(基于设备分组)完成,4M 行规模两者均可承载。
  • 键与索引:
    • 主键:device_id + ts_utc(读数级);推荐分析键:device_key + minute_ts。
  • 审计与可追踪性:
    • 保存原始值列(如 temp_c_raw)与清洗后列(temp_c_adj),以及质量标记列。
    • 每步计数与日志输出(去重数、丢弃数、插值数)。
  • 配置化阈值:
    • 所有范围与插值上限在配置中管理,干跑阶段根据实际分布调整。

交付物

  • Clean_1min.parquet:长表,字段包括 device_id, device_key, minute_ts, temp_c_adj, humidity_pct, co2_ppm, pressure_pa, fan_speed_pct, power_kw, status, 各质量标记, weather 对齐字段(outdoor_temp_c, rh_pct, wind_mps)。
  • Clean_5min.parquet:5 分钟重采样版本。
  • 质量报告(JSON/CSV):含重复、异常、插值、延迟、分段统计。
  • 目标变量列:power_kw_next_15min 与 target_valid 标记已包含在两版本中。
  • 规则验证报告(干跑与全量):阈值与效果评估,3 月留出集的插值与对齐质量评估。

数据清洗与特征工程计划

  1. 目标与输出
  • 目标:基于安装级快照构建两类标签并产出特征集,支持模型预测 r7_revenue_usd(安装后7日净收入)与 payer_7d(7日内是否付费)。
  • 输出:
    1. 清洗后的基础层(clean layer):clean_ad_spend_daily、clean_installs、clean_events、clean_user_profile
    2. 训练快照(feature layer):features_install_snapshot(两个时间切点:T0=安装时、T1=安装后24小时)
    3. 标签层(label layer):labels_r7(r7_revenue_usd、payer_7d)
  • 范围:2024-06-01 至 2024-09-30;开发期采用 6 月 5%随机安装样本并保留全量付费用户;9 月作为留出集。
  1. 数据摄取与统一
  • 文件介质:CSV 与 Parquet 混合。禁用自动推断,显式制定 schema。
  • 指定 schema(关键字段类型):
    • ad_spend.csv:date DATE, campaign_id STRING, channel STRING, cost_usd DOUBLE, impressions LONG, clicks LONG, currency STRING
    • installs.csv:install_id STRING, user_id STRING, campaign_id STRING, country STRING, os STRING, install_time TIMESTAMP (UTC), att_status STRING, device_price_bucket STRING
    • events.parquet:user_id STRING, event_time TIMESTAMP WITH TZ, event_name STRING, revenue_usd DOUBLE, order_id STRING
    • user_profile.csv:user_id STRING, age_band STRING, gender STRING, region STRING, paid_user BOOLEAN
  • 统一标识与文本规范:
    • user_id:统一为大写,trim。生成 user_id_norm。
    • campaign_id:统一为大写,trim。生成 campaign_id_norm。
    • channel、country、os、att_status、device_price_bucket、gender、region:统一小写或枚举规范化,trim。
  • 时区与时间:
    • installs.install_time 已为 UTC(Z)。保留为 install_ts_utc。
    • events.event_time:按原记录偏移解码,统一转换为 UTC,保存 event_ts_utc;保留原偏移来源字段 tz_source(如 +08:00/UTC)。
    • ad_spend.date:视为供应商账期日(通常本地或UTC)。若无时区标注,先按原值处理,并与 install_date_utc=to_date(install_ts_utc)进行日粒度匹配;保留后续对账校验逻辑。
  1. 表级清洗规则 3.1 installs(主键:install_id)
  • 重复 install_id:
    • 规则:按 install_id 分组,优先保留最早 install_ts_utc 的记录(same-day重复占比高的渠道回传常见);若字段冲突:
      • user_id:取众数;如无一致则取最早记录值
      • campaign_id、country、os、att_status、device_price_bucket:优先取非空;存在冲突则取最早记录值
    • 输出:dedup_flag(bool),dup_count(int)
  • 字段校验:
    • os ∈ {android, ios};异常值置为 null,并记录 os_invalid_flag
    • att_status ∈ {authorized, denied};异常值置为 null
    • country:ISO2 大写;异常编码归一到 “unknown”
    • device_price_bucket ∈ {low, mid, high};异常归一到 “unknown”
  • 派生字段:
    • install_date_utc=to_date(install_ts_utc)
    • install_hour_utc(0-23)、install_wday_utc(1-7)
    • user_id_norm、campaign_id_norm(见统一规范)

3.2 events(候选唯一键:user_id_norm + event_ts_utc + event_name)

  • 时区统一:将 event_time 按偏移转换为 event_ts_utc(TIMESTAMP UTC),保留 tz_source。
  • 去重:
    • 基于 user_id_norm + event_ts_utc + event_name 去重;若同键 revenue_usd 多值:
      • 对 purchase 事件:合并为单条,revenue_usd 取和,order_id 保留列表或首个(用于一致性审核)
      • 非付费事件:保留单条
    • 输出:event_dup_flag
  • 收入处理:
    • revenue_usd 对非 purchase 事件统一置 0(并保留原值至 revenue_usd_raw 以便审计)
    • 负值视为退款(chargeback),保留并标记 refund_flag(revenue_usd<0)
    • purchase 的 revenue_usd 可为正负;保留净额计算能力
  • 事件过滤与对齐:
    • 仅保留能关联到 installs.user_id_norm 的事件;无法关联的记录进入孤立表 events_orphan 以便核查
    • 针对每个安装,保留 install_ts_utc 至 install_ts_utc+30d 的事件用于扩展分析;建模与标签严格使用 7d 窗口
    • 若事件时间 < 安装时间(设备时钟偏差):设置 negative_lag_flag;超过 -10 分钟的事件视为预安装噪声,移除

3.3 ad_spend(聚合键:date + campaign_id_norm + channel)

  • 命名与枚举:campaign_id、channel 统一规范化;空字符串视为 null。
  • cost_usd 缺失处理(cost_usd_missing_flag):
    • 估算顺序:
      1. 近邻期同 campaign_id_norm+channel 的 CPC:cost_usd=clicks×CPC_rolling7(滚动7天加权均值)
      2. 若 clicks=0,则用 CPM:cost_usd=(impressions/1000)×CPM_rolling7
      3. 若两者皆不可用,用 channel 级 CPC/CPM 历史均值
    • 标记来源:cost_usd_source ∈ {actual, cpc_model, cpm_model, channel_avg}
    • 不做均值估算的替代策略:若估算不可靠(样本<50点击或<100k展示),保留缺失并下游特征以缺失编码(推荐优先使用估算+质量标记)
  • 派生指标(日-活动-渠道粒度):
    • ctr=clicks/impressions(分母为0则置0)
    • cvr=installs_count/clicks(join 至 installs 后计算;分母为0置0)
    • cpc=cost_usd/max(clicks,1)
    • cpm=cost_usd/max(impressions,1)×1000
    • installs_count:当日匹配 installs(见跨表关联)
    • cpi=cost_usd/max(installs_count,1)

3.4 user_profile(主键:user_id_norm)

  • 编码规范与填充:
    • age_band 映射至有序分箱:{<18, 18-24, 25-34, 35-44, 45-54, 55+};异常值与缺失置为 "unknown"
    • gender ∈ {male, female, unknown};异常→unknown
    • region:归一到预置枚举(如 north/south/east/west/central);异常→unknown
    • paid_user 为布尔;异常→null
  • 补全率低:
    • 不做基于事件的反推填充,避免引入标签泄漏;保留缺失并产出缺失指示特征
    • 输出:profile_missing_flag(行级)、各字段 missing_flag
  1. 跨表关联与一致性检查
  • installs ←→ ad_spend:on campaign_id_norm and install_date_utc = ad_spend.date。左连接(保留所有安装);记录是否匹配 spend(ad_spend_match_flag)
  • events ←→ installs:on user_id_norm。内连接形成安装会话事件;记录每条事件是否在安装后窗口内(within_7d_flag、within_24h_flag)
  • 一致性度量:
    • 日级 install- spend 匹配率(≥95% 期望);低于阈值需回溯渠道账期时区或命名
    • 去重率、负收入占比、时区转换后事件滞后分布
    • 事件孤立率(无法关联安装)应 <1%
  1. 标签构造(label layer)
  • 窗口定义:基于 UTC 时间,安装后 [0, 7) 天内事件。
  • r7_revenue_usd:
    • 定义:sum(revenue_usd) for purchase events within 7d(包含退款,负值计入净额)
    • 同时产出 r7_revenue_gross(仅正值求和,不含退款)与 r7_refund_usd(负值加总,绝对额)
  • payer_7d:
    • 定义:7日内是否发生至少一次正收入 purchase(any revenue_usd > 0)
    • 辅助:payer_7d_any_purchase(含负净额但有正单次支付,也置1)若有需要区分净额为负的付款后退款场景可另外提供 payer_7d_net_positive(r7_revenue_usd>0)
  1. 采样与切片
  • 清洗规则开发与调试:2024-06 随机抽样 5% installs + 全量付费用户(确保付费样本充分);事件与广告数据按关联提取。
  • 留出集:2024-09 全量,用于时间外推验证。
  • 分层:按 payer_7d 进行过采样少数类(仅在训练集、保持时间一致性,不打乱安装时间序)。
  1. 特征工程候选集(含工程说明) 特征按两类快照生成:
  • T0(安装时可用,无后置事件,避免泄漏)
  • T1(安装后24小时内事件,作为早期行为信号)

7.1 广告与投放特征(安装日-活动-渠道)

  • cpc_t0:ad_spend.cpc 当日 campaign_id_norm+channel
  • cpm_t0:ad_spend.cpm 当日
  • ctr_t0:当日 CTR
  • cvr_t0:当日 CVR(需与 installs 关联后的 clicks→installs)
  • cpi_t0:当日 CPI(cost_usd / installs_count)
  • spend_per_install_t0:同 CPI;若 cost_usd 缺失估算,保留 cost_imputed_flag
  • campaign_channel_onehot:campaign_id_norm、channel 的嵌入或 one-hot(高基数建议 target encoding/embedding,在建模阶段处理)
  • ad_spend_match_flag:是否匹配到账(质量特征)
  • rolling_7d_campaign_cpc_t0:安装日前7天(不含当日)滚动加权 CPC(避免同日未来信息)
  • rolling_7d_campaign_cpm_t0、rolling_7d_campaign_ctr_t0、rolling_7d_campaign_cvr_t0 工程说明:上述 rolling 特征以安装日前一日作为窗口上限,避免数据泄漏;权重按 clicks 或 impressions。

7.2 用户与设备特征

  • country_onehot / region_onehot:国家与区域(异常编码→unknown一类)
  • os_onehot:android/ios
  • att_status_bin:authorized=1, denied=0, missing=-1
  • device_price_bucket_ord:low=0, mid=1, high=2, unknown=-1
  • install_hour_utc、install_wday_utc:时间形态特征
  • age_band_ord:<18=0, 18-24=1, 25-34=2, 35-44=3, 45-54=4, 55+=5, unknown=-1
  • gender_onehot:male/female/unknown
  • paid_user_profile_bin:user_profile.paid_user(缺失→-1)
  • profile_missing_flag:整行缺失指示 工程说明:高基数字段(campaign_id)不直接 one-hot,建议在模型阶段采用频率编码、目标编码或embedding。

7.3 早期行为特征(T1,安装后24小时内)

  • sessions_24h:event_name=session_start 计数
  • add_to_cart_24h:计数
  • purchases_24h:purchase 次数(revenue_usd>0 的次数与总次数分别计算:purchases_pos_24h、purchases_any_24h)
  • revenue_gross_24h:正收入求和
  • revenue_net_24h:净收入(含退款)
  • refund_24h_flag:是否出现退款(revenue_usd<0)
  • time_to_first_session_min:min(event_ts_utc - install_ts_utc) for session_start(分钟)
  • time_to_first_purchase_min:同上(正收入 purchase)
  • aov_24h:24h 内正收入总额 / 正收入 purchase 次数(分母为0置0)
  • event_mix_entropy_24h:24h 事件类型分布熵(指示活跃多样性) 工程说明:全部限定在安装后24小时窗口,避免对7日目标的直接泄漏;同时产出 within_24h_flag 保障窗口约束。

7.4 归因与一致性特征

  • event_negative_lag_flag:事件早于安装时间(>10 分钟阈值)占比(作为数据质量信号)
  • events_orphan_rate_user:用户事件无法关联安装的比率(安装聚合)
  • user_id_case_inconsistency_flag:跨表原始 user_id 大小写不一致(用于审计)

7.5 目标相关但非训练输入的监控指标(不作为特征输入)

  • r7_revenue_gross、r7_refund_usd(用于报表与模型诊断)
  • day_campaign_roi_r7:当日 campaign 的 r7 净收入 / cost_usd(用于渠道评估)
  1. 计算与实现要点(伪逻辑)
  • 时区统一(Spark SQL 示例):
    • events_clean as select upper(trim(user_id)) as user_id_norm, to_utc_timestamp(event_time, extract_tz(event_time)) as event_ts_utc, lower(trim(event_name)) as event_name, coalesce(revenue_usd,0.0) as revenue_usd_raw, case when lower(trim(event_name))='purchase' then coalesce(revenue_usd,0.0) else 0.0 end as revenue_usd from events_parquet
  • installs 去重:
    • installs_dedup as select * from ( select i.*, upper(trim(user_id)) as user_id_norm, upper(trim(campaign_id)) as campaign_id_norm, row_number() over (partition by install_id order by install_time asc) as rn from installs_csv i ) where rn=1
  • events 关联与窗口:
    • events_linked as select e.*, i.install_ts_utc, e.event_ts_utc between i.install_ts_utc and i.install_ts_utc + interval 7 days as within_7d_flag, e.event_ts_utc between i.install_ts_utc and i.install_ts_utc + interval 1 day as within_24h_flag from events_clean e join installs_dedup i using (user_id_norm)
  • r7 标签:
    • labels_r7 as select i.install_id, sum(case when within_7d_flag and revenue_usd>0 and event_name='purchase' then revenue_usd else 0 end) as r7_revenue_gross, sum(case when within_7d_flag and event_name='purchase' then revenue_usd else 0 end) as r7_revenue_usd, sum(case when within_7d_flag and revenue_usd<0 and event_name='purchase' then revenue_usd else 0 end) as r7_refund_usd, case when max(case when within_7d_flag and event_name='purchase' and revenue_usd>0 then 1 else 0 end)=1 then 1 else 0 end as payer_7d from events_linked group by i.install_id
  • ad_spend 衔接与 CPI:
    • spend_daily as select date, upper(trim(campaign_id)) as campaign_id_norm, lower(trim(channel)) as channel, cost_usd, impressions, clicks from ad_spend_csv
    • installs_daily as select install_date_utc as date, campaign_id_norm, channel, count(*) as installs_count from installs_dedup join spend_daily using (campaign_id_norm) where install_date_utc = spend_daily.date group by install_date_utc, campaign_id_norm, channel
    • cpi_daily as select s.date, s.campaign_id_norm, s.channel, s.cost_usd / nullif(i.installs_count,0) as cpi from spend_daily s left join installs_daily i using (date, campaign_id_norm, channel)
  1. 质量监控与验收标准
  • 主键完整性:installs.install_id 唯一;events 去重后复合键唯一性冲突率 <0.1%
  • 时区一致性:事件滞后分布中负滞后(<-10 分钟)率 <0.5%
  • 广告对齐:install-date 与 ad_spend.date 匹配率 ≥95%;低于阈值需渠道账期时区复核
  • 缺失与估算:cost_usd 估算记录占比与误差(通过与已知成本的对齐天验证),RMSE 控制在渠道均值 ±15% 范围
  • 退款标记:负收入识别准确率(与订单维度抽查)≥99%
  1. 交付结构
  • clean_ad_spend_daily:date, campaign_id_norm, channel, cost_usd, cost_usd_source, cost_usd_missing_flag, impressions, clicks, ctr, cpc, cpm
  • clean_installs:install_id, user_id_norm, campaign_id_norm, country, os, att_status, device_price_bucket, install_ts_utc, install_date_utc, install_hour_utc, install_wday_utc, dedup_flag
  • clean_events:user_id_norm, event_ts_utc, event_name, revenue_usd, refund_flag, within_7d_flag, within_24h_flag, event_dup_flag, tz_source
  • clean_user_profile:user_id_norm, age_band_norm, gender_norm, region_norm, paid_user, profile_missing_flag
  • features_install_snapshot:
    • T0 特征:广告投放、用户画像、设备与安装时间特征、滚动7天历史投放指标、质量标记
    • T1 特征:24h 行为特征(counts、times、entropy、revenue_24h),质量标记
  • labels_r7:install_id, r7_revenue_usd, r7_revenue_gross, r7_refund_usd, payer_7d
  1. 备注与边界
  • currency 字段当前为 USD;如后续出现非USD,需引入统一 FX 表并在摄取层转换为 cost_usd。
  • 高基数字段(campaign_id_norm)建议在建模阶段使用频率或目标编码;避免稀疏 one-hot。
  • 所有估算与清洗动作均保留来源与标记,以便模型使用质量特征与审计回溯。

示例详情

该提示词已被收录:
“AI工程师必备:高效建模与数据处理提示词合集”
覆盖建模到评估关键环节,助你快速构建高性能模型
√ 立即可用 · 零学习成本
√ 参数化批量生成
√ 专业提示词工程师打磨

📖 如何使用

30秒出活:复制 → 粘贴 → 搞定
与其花几十分钟和AI聊天、试错,不如直接复制这些经过千人验证的模板,修改几个 {{变量}} 就能立刻获得专业级输出。省下来的时间,足够你轻松享受两杯咖啡!
加载中...
💬 不会填参数?让 AI 反过来问你
不确定变量该填什么?一键转为对话模式,AI 会像资深顾问一样逐步引导你,问几个问题就能自动生成完美匹配你需求的定制结果。零门槛,开口就行。
转为对话模式
🚀 告别复制粘贴,Chat 里直接调用
无需切换,输入 / 唤醒 8000+ 专家级提示词。 插件将全站提示词库深度集成于 Chat 输入框。基于当前对话语境,系统智能推荐最契合的 Prompt 并自动完成参数化,让海量资源触手可及,从此彻底告别"手动搬运"。
即将推出
🔌 接口一调,提示词自己会进化
手动跑一次还行,跑一百次呢?通过 API 接口动态注入变量,接入批量评价引擎,让程序自动迭代出更高质量的提示词方案。Prompt 会自己进化,你只管收结果。
发布 API
🤖 一键变成你的专属 Agent 应用
不想每次都配参数?把这条提示词直接发布成独立 Agent,内嵌图片生成、参数优化等工具,分享链接就能用。给团队或客户一个"开箱即用"的完整方案。
创建 Agent

✅ 特性总结

一键生成针对特定数据集的清洗计划,覆盖检查、修复、验证全流程,快速落地团队标准作业。
自动识别缺失值、异常值与重复记录,给出可执行处理策略,显著降低人为疏漏与返工成本。
智能建议字段标准化与命名规范,统一口径与格式,让报表、分析与建模环节协同无缝。
生成可复用清洗模板与步骤清单,支持不同业务场景快速套用,缩短从探索到上线的周期。
提供质量评估指标与验收指南,帮助团队量化清洗效果,明确达标条件与后续跟踪。
面向营销、风控、运营等场景给出差异化策略,确保关键字段可靠,提升决策与投放命中率。
结合数据样本与业务背景生成风险提示与优先级排序,帮助团队先解决高影响问题。
输出结构化文档与清晰责任分工,方便跨部门协作与审计复核,减少沟通成本与误解。
根据语言偏好自动生成本地化计划与术语释义,让全球团队快速理解并一致执行。
在建模前提供数据准备清单与可视化检查建议,提升模型稳定性与可解释性。

🎯 解决的问题

面向数据团队与业务团队,快速生成一份结构化、可执行、可审阅的数据清洗计划。以最少输入换取高质量输出:明确要清什么、如何清、何时清、由谁清,以及如何验收。帮助你在短时间内完成从“杂乱数据”到“可用数据”的第一步,减少沟通成本,避免遗漏关键环节,提升项目交付速度与质量。

🕒 版本历史

当前版本
v2.1 2024-01-15
优化输出结构,增强情节连贯性
  • ✨ 新增章节节奏控制参数
  • 🔧 优化人物关系描述逻辑
  • 📝 改进主题深化引导语
  • 🎯 增强情节转折点设计
v2.0 2023-12-20
重构提示词架构,提升生成质量
  • 🚀 全新的提示词结构设计
  • 📊 增加输出格式化选项
  • 💡 优化角色塑造引导
v1.5 2023-11-10
修复已知问题,提升稳定性
  • 🐛 修复长文本处理bug
  • ⚡ 提升响应速度
v1.0 2023-10-01
首次发布
  • 🎉 初始版本上线
COMING SOON
版本历史追踪,即将启航
记录每一次提示词的进化与升级,敬请期待。

💬 用户评价

4.8
⭐⭐⭐⭐⭐
基于 28 条评价
5星
85%
4星
12%
3星
3%
👤
电商运营 - 张先生
⭐⭐⭐⭐⭐ 2025-01-15
双十一用这个提示词生成了20多张海报,效果非常好!点击率提升了35%,节省了大量设计时间。参数调整很灵活,能快速适配不同节日。
效果好 节省时间
👤
品牌设计师 - 李女士
⭐⭐⭐⭐⭐ 2025-01-10
作为设计师,这个提示词帮我快速生成创意方向,大大提升了工作效率。生成的海报氛围感很强,稍作调整就能直接使用。
创意好 专业
COMING SOON
用户评价与反馈系统,即将上线
倾听真实反馈,在这里留下您的使用心得,敬请期待。
加载中...
📋
提示词复制
在当前页面填写参数后直接复制: