网易首页 > 网易号 > 正文 申请入驻

分类数据 EDA 实战:如何发现隐藏的层次结构

0
分享至



探索性数据分析(EDA)的本质不是画图和算统计量,而是不被自己的数据欺骗。

分类列是最容易出问题的地方。city、category、product、department、role、customer_type——这些列看起来很简单,跑个 value_counts()画个柱状图搞定了。

其实分类变量往往藏着隐藏的层次结构。这些关系存在于类别内部,不主动挖掘根本看不出来。一旦忽略那么就会得到错误的结论、垃圾特征、误导性的报表。

这篇文章讲的是如何在 EDA 阶段把这些隐藏结构找出来,用实际的步骤、真实的案例,外加可以直接复用的 Python 代码。

什么是"隐藏层次结构"?

一个分类变量表面看起来是扁平的,实际上却是分层的:这就是隐藏层次结构。

举几个常见例子:City 背后藏着收入水平、门店类型、客户行为;Product Category 背后是价格层级和利润模式;Customer Type 对应着忠诚度阶段或消费能力;Department 则可能隐含资历或责任级别。

把所有类别一视同仁EDA 就废了,因为它们从来都不平等。

示例数据集

继续使用同一份销售数据,保持系列的连贯性。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid")
df = pd.read_csv("sales_data.csv")
df['order_date'] = pd.to_datetime(df['order_date'])
df.head()

扁平类别的假象

初学者通常这么干:

df['city'].value_counts()

输出:Delhi: 3,Mumbai: 1,Bangalore: 1。

结论:"Delhi 销售最多。"

技术上没错,分析上毫无价值。

EDA 应该问更好的问题:Delhi 的客户是买得更频繁,还是买得更贵?Delhi 的数据是不是被某一个客户撑起来的?不同城市的品类结构有没有差异?

扁平的计数把真正的结构埋了起来。

频率不等于重要性

比较一下频率和价值:

df.groupby('city')['amount'].sum().sort_values(ascending=False)

再看均值:

df.groupby('city')['amount'].mean().sort_values(ascending=False)

你很可能发现:某个城市订单少但客单价高,另一个城市量大但贡献的收入反而一般。

这就是第一个隐藏层次结构:数量主导 vs 价值主导。

出现频率高的类别,并不自动意味着更重要。

嵌套类别

类别很少孤立存在。看看 city → category 的关系:

pd.crosstab(df['city'], df['category'], normalize='index')

可视化一下:

pd.crosstab(df['city'], df['category'], normalize='index')\
.plot(kind='bar', stacked=True, figsize=(8,5))
plt.title("Category Distribution Within Each City")
plt.show()

模式开始出现了:有的城市电子产品占大头,有的城市家具更突出,还有的城市品类分布比较均匀。

这里的隐藏层次结构是:城市不是一个类别,而是一个容器。

忽略这一点,细分就做不好,报表也只是走过场。

主导类别背后的子群组

看看 category:

df['category'].value_counts(normalize=True)

电子产品占主导。但继续拆解:

df.groupby(['category', 'product'])['amount'].sum()

很可能发现某一个产品贡献了绝大部分收入,其他产品只是凑数的。

一个大类别可能完全由一个小子群组撑着。这对特征工程、库存规划、模型偏差都有直接影响。

客户层级

客户 ID 本质上也是分类变量,而且层次很深。

df.groupby('customer_id')['amount'].sum().sort_values(ascending=False)

你可能会看到某个客户贡献了大部分收入,或者同一个人反复购买。

再叠加城市维度:

df.groupby(['customer_id', 'city'])['amount'].sum()

真相可能是:某个城市的"领先地位"其实就靠一个客户撑着。由此得出的地理结论完全站不住脚。

永远要检查:一个类别是由众多贡献者驱动的,还是被某个异常个体拉高的。

时间带来的层次

时间天然会产生层次结构。

df['month'] = df['order_date'].dt.month
df.groupby(['city', 'month'])['amount'].sum().unstack()

画出来:

sns.lineplot(data=df, x='month', y='amount', hue='city', marker='o')
plt.show()

你可能会发现不同城市在不同月份达到峰值,季节性主导权在品类之间轮换。

静态的柱状图永远看不到这些。

类别与数值的交互

处理分类数据时,交互分析是最关键的一环。

先看单一维度:

sns.boxplot(x='category', y='amount', data=df)
plt.show()

加上城市:

sns.boxplot(x='city', y='amount', hue='category', data=df)
plt.xticks(rotation=45)
plt.show()

同一个品类在不同城市的表现可能天差地别,消费分布不一样,隐藏的高端细分市场也藏在里面。

特征创意往往就是这么来的。

隐藏层次结构如何破坏模型

不做 EDA 就直接 one-hot 编码会出大问题,因为高价值和低价值的子群组被混在一起,客户集中度信息泄露,噪声被放大。

EDA 阶段可以这样修补:

df['high_value_customer'] = (
df.groupby('customer_id')['amount']
.transform('sum') > df['amount'].median()
).astype(int)

这个特征的存在,完全依赖于对层次结构的挖掘。

分类数据的 EDA 清单

每个分类列都应该过一遍:频率检查、基于价值的聚合、跨类别交互、时间维度拆分、异常值主导检查。

跳过这些,EDA 就只是做做样子。

面试时怎么说

不要说"我检查了分类分布"。

要说:"我通过结合频率、价值贡献以及与时间和数值变量的交互,分析了分类变量的隐藏层次结构,识别出主导子群组,避免了建模时的误导性结论。"

面试官一听就知道你是明白人。

总结

分类数据从来都不是扁平的。EDA 存在的意义,就是证明这个假设是错的。

隐藏的层次结构能解释很多事:为什么报表会骗人,为什么模型会过拟合,为什么业务决策让人一头雾水。

一旦开始有意识地寻找这些结构,就再也回不去了。分析的段位会直接拉升一个档次。

EDA 的目的不是更快地出图,而是在相信图表之前,先想清楚。

https://avoid.overfit.cn/post/829701eeb5dc40d094b0f69df05c3b15

by Gitanjali

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
为了活出自由人生,内马尔33岁当爷爷究竟付出了多大代价?

为了活出自由人生,内马尔33岁当爷爷究竟付出了多大代价?

罗氏八卦
2026-02-05 20:35:03
哭穷?26岁前国乒名将:我年薪50万 在上海仅够温饱 绝无财富自由

哭穷?26岁前国乒名将:我年薪50万 在上海仅够温饱 绝无财富自由

念洲
2026-02-03 16:01:29
真·喂饭级教程,教你十分钟部署OpenClaw

真·喂饭级教程,教你十分钟部署OpenClaw

四木相对论
2026-02-05 10:01:41
收手吧谢苗!想学成龙拍“警察故事”,票房仅2038万,被老片打懵

收手吧谢苗!想学成龙拍“警察故事”,票房仅2038万,被老片打懵

娱乐故事
2026-02-04 21:28:26
动真格了!上海浦东已经下场收了一个小区40套!

动真格了!上海浦东已经下场收了一个小区40套!

林子说事
2026-02-05 10:53:41
某鱼惊现“天价笔”:800元一支的中性笔,藏着多少肮脏暗语?

某鱼惊现“天价笔”:800元一支的中性笔,藏着多少肮脏暗语?

戗词夺理
2026-01-24 16:05:41
提醒大家:洗衣机里,不管有几件衣服,千万要记得放几个塑料袋!

提醒大家:洗衣机里,不管有几件衣服,千万要记得放几个塑料袋!

美食格物
2026-02-04 22:51:09
结婚23年她的内衣都是丈夫洗,在丈夫入狱后,她为夫还债三千万

结婚23年她的内衣都是丈夫洗,在丈夫入狱后,她为夫还债三千万

琨玉秋霜
2026-01-27 14:10:08
任浩脸气青了!陈熠惨败桥本太沮丧 韩莹丈夫:差了孙颖莎一档

任浩脸气青了!陈熠惨败桥本太沮丧 韩莹丈夫:差了孙颖莎一档

颜小白的篮球梦
2026-02-06 09:37:44
原来她已离世26年!23岁登春晚一夜成名,却因一个巴掌付出生命

原来她已离世26年!23岁登春晚一夜成名,却因一个巴掌付出生命

法老不说教
2025-12-24 12:22:51
《太平年》:黄袍加身、被迫上位,郭威为什么死活不愿意当皇帝?

《太平年》:黄袍加身、被迫上位,郭威为什么死活不愿意当皇帝?

烟花五月下苏州
2026-02-06 00:00:06
江苏一女子被茶宠青花瓷麒麟“咬了”,求助消防后脱困:想试下它嘴巴里的结构,结果一下卡住,大家别学我

江苏一女子被茶宠青花瓷麒麟“咬了”,求助消防后脱困:想试下它嘴巴里的结构,结果一下卡住,大家别学我

台州交通广播
2026-02-05 17:54:55
勇士这次不一样?

勇士这次不一样?

静易墨
2026-02-05 19:19:17
失业后我才发现:从古至今,赚钱最快的路子就一个,从未改变

失业后我才发现:从古至今,赚钱最快的路子就一个,从未改变

另子维爱读史
2026-01-16 21:23:39
48岁保洁阿姨睡在公司1个月,老板打开了监控,第2天送给她20万

48岁保洁阿姨睡在公司1个月,老板打开了监控,第2天送给她20万

秀秀情感课堂
2025-12-12 14:20:05
交易之后,联盟薪资榜大变动!勇士领跑,船骑随后!

交易之后,联盟薪资榜大变动!勇士领跑,船骑随后!

篮球盛世
2026-02-05 17:18:41
第一个被执行死刑的女明星,红遍大江南北,枪毙前大喊:这不公平

第一个被执行死刑的女明星,红遍大江南北,枪毙前大喊:这不公平

小豫讲故事
2026-01-23 06:00:04
销售团队为啥解散?月薪3万,一个月才卖50辆车!

销售团队为啥解散?月薪3万,一个月才卖50辆车!

小怪吃美食
2026-02-06 09:25:45
民进党天塌了: 特朗普亲口连夜向中国做出一项承诺,一切刚刚开始

民进党天塌了: 特朗普亲口连夜向中国做出一项承诺,一切刚刚开始

贾文彬的史书
2026-02-06 09:48:30
2003年廊坊械斗命案:臧天朔被捕后才知,原来当初自己那么愚蠢

2003年廊坊械斗命案:臧天朔被捕后才知,原来当初自己那么愚蠢

芳芳历史烩
2026-01-15 13:57:57
2026-02-06 10:44:49
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
1912文章数 1447关注度
往期回顾 全部

科技要闻

微信封禁元宝红包后,又把阿里千问封了

头条要闻

中纪委连打四虎:一人纵容配偶不实际工作而获取薪酬

头条要闻

中纪委连打四虎:一人纵容配偶不实际工作而获取薪酬

体育要闻

西甲射手榜第2,身价不到姆巴佩1/40

娱乐要闻

两大硬汉同框!谢霆锋帅到犯规,吴京都看笑了

财经要闻

很意外,美债危机要化解了

汽车要闻

李想为全新L9预热 all in AI造更好的车

态度原创

家居
游戏
艺术
公开课
军事航空

家居要闻

现代轻奢 温馨治愈系

《热血传奇》最逆天隐藏属性!看似鸡肋的套装,竟让全服陷入混乱

艺术要闻

Kristin Vestgard:挪威当代画家

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

内塔尼亚胡:已做好对伊朗发动"非常严厉打击"的准备

无障碍浏览 进入关怀版