AI 做数据分析这事儿,聊的人多,真正敢拿一份真实业务表上手拆的人少。我最近刚好处理了一份 3816 行的月结销售表,来自某消费品公司的跨区域经销业务,字段不算复杂,但脏数据、异常值、口径问题一样不缺。这篇文章就把整个拆解过程原样复盘一遍——从让 AI 读懂表格,到定位异常订单,再到输出能直接拿去开周会的结论,每一步都附上提示词、代码和踩坑记录。不管你是运营、财务还是刚转行的数据分析师,照着这套流程走一遍,基本就能摸清 AI 在数据分析上的能力边界。
先说结论:AI 目前还不是一个能独立完成分析工作的“分析员”,它更像一个读写速度快、代码不会写错、但需要你不断校准方向的助手。它的价值在于把“清洗-探索-诊断-呈现”这四步里最耗时的部分压缩掉,把人的精力释放给业务判断。下面进入正题。
1. 数据准备:让 AI 先“看懂”你的表,再谈分析
1.1 拿到 3816 行销售表后,第一件事不是跑代码
很多人拿到 CSV 的第一反应是直接丢给 AI 让它“分析一下”,这种做法十次有九次要返工。原因很简单:AI 对业务表的结构一无所知,它不知道QTY是数量还是金额,也不知道CHANNEL里的A和B分别代表什么。第一步应该是让 AI 先做数据体检,也就是把表的骨架摸清楚。
我当时的做法是先用 Python 读取文件,然后让 AI 输出每一列的非空值数量、数据类型、唯一值样例。这里有个小技巧:不要直接问“这张表有多少列”,而是让 AI 一次性输出以下信息,保存成一张数据字典:
import pandas as pd df = pd.read_csv("sale_monthly_202407.csv", encoding="utf-8-sig") info = [] for col in df.columns: info.append({ "字段名": col, "非空数": df[col].notna().sum(), "唯一值数": df[col].nunique(), "样例": df[col].dropna().unique()[:3].tolist() }) info_df = pd.DataFrame(info) print(info_df.to_string())这一步走完,AI 会返回一张类似下面的表:
| 字段名 | 非空数 | 唯一值数 | 样例 |
|---|---|---|---|
| ORDER_ID | 3816 | 3809 | SO-20240701-001... |
| ORDER_DATE | 3816 | 31 | 2024-07-01... |
| CHANNEL | 3816 | 4 | 直营/经销/电商/团购 |
| SKU | 3816 | 87 | A1001/B2002... |
| QTY | 3816 | 47 | 1/2/5/10... |
| AMOUNT | 3816 | 312 | 199.0/598.0... |
| COST | 3816 | 298 | 120.0/350.0... |
| REGION | 3816 | 6 | 华东/华南/华北/西南/东北/华中 |
| ORDER_STATUS | 3816 | 3 | 已完成/已取消/已退款 |
这 9 个字段看起来干净,但仔细对着看就能发现几个问题:ORDER_ID的唯一值数比行数少,说明有重复订单;QTY有 47 个唯一值,正常销售数量不该这么碎,可能有 0 或负数;ORDER_STATUS里存在取消和退款,这些订单的金额是否应该计入销售总额,需要业务方给口径。
提示:这个环节的价值不是跑一遍
df.info()就完事,而是让 AI 把字段级别的问题全部暴露在纸面上。后续所有分析的可信度,都建立在这一步的完整度上。
1.2 清洗规则的确定:哪些数据“不能见人”
确定字段含义后,我开始让 AI 按以下规则清洗数据,这也是我在类似项目里反复使用的标准流程:
- 删除完全重复的订单行(保留第一条)。
- 将
ORDER_DATE统一转为datetime类型,并提取“周次”字段便于后续做趋势分析。 - 将
AMOUNT、COST转为浮点数,处理千分位逗号。 - 对
QTY <= 0或AMOUNT <= 0的订单单独标记,不直接删除,留到诊断环节回溯。 - 新增计算列:
毛利 = 金额 - 成本,毛利率 = 毛利 / 金额。
这里有个细节值得单独说:很多人习惯把异常值直接删掉,图省事。但在真实业务里,金额为负可能是退款单、也可能是录入错误,删掉之前必须确认它是“真异常”还是“特殊业务类型”。所以我会让 AI 先把异常行标记出来、单独存一张表,而不是混在主表里。
清洗后的数据共 3762 行(剔除 54 行重复订单和录入异常),这个数字后面还会用到。清洗完成后,AI 自动生成了数据质量报告,包含“重复率 1.4%,金额缺失率 0%,负金额订单 12 笔”等指标。到这一步,AI 才算是真正“看懂”了这张表。
2. 探索性分析:别让 AI 自由发挥,给定维度再看产出
2.1 先定分析框架:会问问题的 AI 才有价值
数据洗干净后,理论上可以让 AI 直接出图表。但如果你问“帮我分析一下销售情况”,AI 通常会给你几个套路化图表:月度总销售额趋势、Top10 SKU、渠道占比。这些图没错,但很空。
一个合格的分析师在动手前,一定会想清楚“这个月我要回答哪几个问题”。我当时的分析框架是:
- 整体盘子:本月总销售额、总销量、毛利率、退款金额占比。
- 渠道结构:不同渠道的销售贡献和毛利率对比,找出“卖得多但赚得少”的渠道。
- 区域表现:各区域销售目标完成率、环比变化,定位增长和下滑区域。
- 单品表现:Top 单品和尾部单品的销量集中度,判断是否依赖爆款。
- 异常诊断:负金额订单集中在哪些渠道和区域,是否存在同一 SKU 高频退款。
把这 5 个问题作为提示词的一部分发给 AI,它给出的结果就完全不一样了——不再是四张孤立图表,而是一套结构化的分析输出。
2.2 渠道与区域的交叉透视:一次“假阴性”的教训
在分析渠道贡献时,我第一次让 AI 直接按CHANNEL分组汇总销售额,得到的结果是“电商渠道销售额最高,占比 41%”。这个数字本身没问题,但当我要求它进一步按REGION交叉透视时,意外出现了:电商渠道在东北区域销售额环比下降了 28%,而同期直营渠道在东北只下降了 3%。
这时 AI 给出了一句让我印象深刻的注释:“东北区域 7 月新上线了促销活动,但促销订单主要通过电商渠道核销,导致电商渠道销售额基数被抬高、直营渠道分流。”这个结论是 AI 从数据中发现的,但背后的业务动作是我补充的——如果没有业务输入,AI 只会报告“东北电商销售异常波动”,而不会解释原因。
这里要强调一个操作细节:分析过程中,每得到一组异动数据,我都会让 AI 给出“可验证的下一步”——比如“请拆分东北区域电商渠道的 SKU 维度,查看促销商品与非促销商品销售额占比”。通过多轮追问,AI 的分析会越来越贴近业务现实。这也是 AI 辅助分析和传统 BI 工具最大的区别:它是对话式的,可以顺着结论往下钻。
2.3 SKU 集中度分析:二八法则在现场
单品表现我用了一张简单的帕累托分析表:按 SKU 汇总销售额降序排序,计算累计占比。结果很典型:前十一个 SKU 贡献了 63% 的销售额,其中三个是毛利率低于 15% 的引流款。这个发现直接影响了后续的库存和定价策略——引流款不能断货,但也不该占用过多资金备货。
这种“二八法则”的分析本身不高级,但 AI 的价值在于把计算过程压缩到了几十秒。传统做法是在 Excel 里先用数据透视表,再算累计占比,再画柱状图和折线图,每一步都要手工操作;AI 只需要一行提示词:“按 SKU 聚合销售额,计算每个 SKU 的销售占比和累计占比,按照累计占比从低到高排序。”它会在几分钟内直接生成代码和结论,甚至附带“Top 11 SKU 累计占比达到 63%,存在明显的头部集中效应”这样可以直接写进周报的表述。
3. 异常诊断:AI 的“灵感”来自数据,结论要靠人
3.1 负金额订单的追溯:一个小数点的蝴蝶效应
清洗时标记出来的 12 笔负金额订单,在粗看时只有 4 笔是整单退款,另外 8 笔金额在 -50 到 -200 元之间,疑似部分退款或者折扣冲销。直接删掉会损失“退款率”这个关键指标的可信度,保留又会干扰销售额汇总。
处理方法是:把这 8 笔订单单独提取出来,用ORDER_ID去关联同一天同一 SKU 的正向订单,查看是否存在“同单号一正一负”的情况。AI 做了这件事之后发现:这 8 笔订单中有 5 笔能找到对应的正向订单,正负金额完全匹配,可以确认为“整单红冲”;另有 3 笔是单纯的录入错误,金额与任何正向订单都对不上。
这个步骤在传统手工分析中很容易被忽略,但 AI 可以轻松完成这种“模糊匹配”的工作。我让 AI 把匹配逻辑写成一个函数:先按订单号完全匹配,再按“同渠道+同 SKU+同日期+金额绝对值相同”匹配,最后输出置信度标记。这样“高置信匹配”和“人工复核匹配”就分开了,后续就算业务方质疑,也能直接给出证据链。
3.2 阴阳单校验:让 AI 学会对账思维
顺着“正负订单匹配”的思路,我额外让 AI 做了一层“阴阳单”校验——同一订单号拆分为多个正向和负向金额,合计是否平衡。这是财务分析里的常见做法,但很少有人用在日常销售分析中。
AI 输出了一个异常清单:某渠道的一笔大额订单 SO-20240718-088,金额 8600 元,在 7 月 20 日被拆成两笔负数(-5000、-3600)分次冲销。表面上看总金额 = 0,但两笔负数的备注字段都为空,缺少冲销原因。如果不做这层校验,月底对账时这笔订单就会被漏掉。这就是 AI 数据处理能力的一个典型应用:它擅长从海量行里找出“不和谐”的组合,但“为什么不和谐”需要人去看。
3.3 退款率与毛利率的“双高”现象
计算退款率时,AI 先按渠道汇总了“退款金额 / 总销售额”,电商渠道退款率 5.8%,明显高于直营的 1.9%。我本以为这是个平台退货的常规现象,但 AI 在自动生成的关联分析里提了一句:“电商渠道退款率最高的 3 个 SKU,同时也是毛利率最高的 3 个 SKU。”这个发现让团队重新审视了定价——高毛利商品的退款率偏高,很可能与“发货后降价”或“描述不符”有关,而不只是平台用户习惯问题。
这是 AI 数据分析最值得称道的一点:它不会嫌弃你的分析思路窄,它会主动探索字段之间的关系。只要提示词里写明“请寻找销售额、退款率、毛利率三者之间的关联”,它就能在数十个维度组合里挑出强相关的几组,作为人工深挖的线索。
4. 实操全流程:从一句需求到一份分析报告
4.1 一套可以直接复用的“提示词模板”
在上面这些实践基础上,我把整个过程的提示词整理成了一个模板,后面做月度分析时会直接套用:
你是资深数据分析师。请按以下步骤分析销售数据: 1. 数据概况:读取文件,输出字段清单、缺失情况、样例值。 2. 数据清洗:给出清洗规则,标注异常行并单独保存。 3. 整体指标:总销售额、总销量、毛利率、退款率,与上月对比。 4. 维度分析:按渠道/区域/SKU 各做一版汇总,标识 Top 与 Bottom。 5. 异常探索:金额为负、数值极端、同单号多次冲销等情况。 6. 结论输出:每条结论必须附带对应的数据表和计算逻辑,禁止无依据推测。 每次只输出一步,等待我确认后再执行下一步。这个模板稳定用了很多次,核心思想是“分步确认”。如果一次性让 AI 完成全部流程,前面出错的清洗逻辑会一路污染后面的分析结果。拆成单步之后,每一步都能复核、修正,最终结论的可靠性会高很多。
4.2 关键代码的可复现版本
下面给出分析中最核心的一段代码,它完成了渠道按下区域透视 + 退款率计算,也是本次“东部渠道异常波动”发现的主要依据:
import pandas as pd df = pd.read_csv("sale_monthly_cleaned.csv", parse_dates=["ORDER_DATE"]) # 标记退款/冲销订单 df["IS_REFUND"] = df["AMOUNT"] < 0 pivot = df.groupby(["CHANNEL", "REGION"]).agg( sales=("AMOUNT", lambda x: x[x > 0].sum()), refund=("AMOUNT", lambda x: abs(x[x < 0].sum())), qty=("QTY", "sum"), gross_profit=("GROSS_PROFIT", "sum") ).reset_index() pivot["refund_rate"] = pivot["refund"] / pivot["sales"] pivot["gross_margin"] = pivot["gross_profit"] / pivot["sales"] pivot = pivot.sort_values("sales", ascending=False) print(pivot.head(20))这段代码跑完之后,输出结果直接揭示了一个容易被忽略的事实:华东和华南合计占销售额的 52%,但毛利率都不超过 18%;西南市场体量只有华东的 1/4,毛利率反而达到 32%。假如只看总量,会得出“华东最重要,应该加码投入”的结论,但结合利润率看,西南市场的投放效率明显更高。
4.3 让 AI 把结论“翻译”成业务语言
分析做完后,很多人会卡在“如何把数据和业务策略衔接”这一步。我的做法是给 AI 设定一个角色,让它把数据结论翻译成业务部门能听懂的语言,但不是让它编造建议。一个比较稳妥的提示词是:
“基于上述数据,用三段话总结:第一段写整体经营状况;第二段写两个需要重点关注的问题;第三段写一个被数据支持的行动建议。每句话都要标注对应的数据来源。”
AI 输出的示例结果:
- 整体经营状况:7 月总销售额约 218.6 万元,环比增长 6.2%,毛利率 21.4%,表现稳定;但退款率从上月 2.1% 升至 3.4%,需要关注。
- 问题一:电商渠道退款率 5.8%,集中在三个高毛利 SKU;问题二:东北区域电商销售额环比波动 -28%,与促销活动核销节奏不一致。
- 行动建议:对退款率最高的 SKU 做详情页与定价的交叉排查;东北区域核对促销订单的实际核销渠道,确认数据归属是否准确。
这三段话没有一条是“拍脑袋”的,全部指向具体的数据表和异常记录。这正是 AI 辅助分析的理想状态——机器负责计算和发现,人负责判断和行动。
5. 常见问题与排查技巧:和 AI 打交道必须知道的坑
5.1 AI 幻觉:它编出来的“结论”比你想象中更流畅
AI 在数据分析中最危险的问题不是算错,而是“一本正经地胡说”。比如我问“本月退货率最高的三个 SKU 分别是什么”时,如果数据表里实际只有两个 SKU 有退货记录,AI 可能会根据整体分布趋势“脑补”出第三个 SKU 的名称,并配上看似合理的退货金额。
应对办法只有一条硬规则:AI 输出的所有结论,必须能追溯到原始数据行。我在提示词中强制加上“每个结论后面附上对应的筛选条件,例如SKU == 'B2002'”,如果 AI 给不出来的条件,那大概率就是它编的。
注意:永远不要直接复制 AI 生成的数字到周报里。AI 可能在前一轮对话中已经算过同一指标,但第二轮因为数据筛选条件漏写,结果却完全不同。
5.2 数据口径不一致:同名指标,两套数字
“销售额”这个指标就有至少三种算法:含退款总额、不含退款净额、按订单状态过滤后的实收额。AI 默认会按它理解的规则计算,导致上一轮和下一轮结果不一致。解决方法是把指标口径提前写死在提示词里,并在每一轮问答开头强调“销售额 = 已完成订单的金额,且不含退款”。
5.3 上下文窗口污染
如果在一个会话里连续分析多张表,AI 可能会把上一张表的字段名带到下一张表。比如上一张表里有GROSS_PROFIT列,新表里没有这个字段,AI 仍然会在代码中引用,导致运行报错。遇到这种情况,不要试图在同一个会话里“纠正”,直接新开一个会话,把清洗好的数据路径和分析目标重新写清楚,效率反而更高。
5.4 可视化输出的限制
AI 生成的图表通常比较基础,不适合直接放进正式报告。我的做法是:让 AI 把计算好的透视表结果导出为 CSV,然后用可视化工具(如常见的 BI 报表平台或 Excel)手动制作最终图表。这样既利用了 AI 的数据处理能力,又保证了出图质量可控。
6. 写在最后:AI 分析数据,卡在哪儿、成在哪儿
经过这次 3816 行销售表的完整拆解,我最大的体感是:AI 正在把数据分析的门槛从“会写代码”降到“会提问题”。它真正擅长的领域是大规模数据清洗、多维度交叉汇总、异常模式的初步筛查——这些过去占掉数据分析师 60% 时间的体力活,现在用对话的方式就能完成。
但它的短板也很明显:没有业务感知,无法判断一个异常值背后是运营活动还是录入失误;没有稳定记忆,会在多轮对话中丢失口径;更没有价值判断,不知道该为哪个结论追加分析。所以,每次拿到 AI 的分析结果,我都会问自己两个问题:这个结论能不能被数据精确复现?这个结论放到业务场景里是否合理?两个问题都回答“是”,才会纳入决策参考。
最后分享一个小技巧:如果你也经常处理月度销售数据,建议把清洗和分析流程固化为脚本,每月只替换数据文件路径。第一次搭建这套流程大概需要半天,之后每个月能省下至少两小时重复劳动。把省下来的时间花在业务沟通和例外判断上,这才是 AI 时代数据分析师最值得做的事。