想象你是一位新上任的班主任。开学第一天,你手里只有一张花名册,上面写着 45 个名字——你不知道谁擅长数学、谁一遇到作文就发怵、谁最近在偷偷用功。你会怎么做?一位有经验的班主任会备一个“成长档案本”,每天记录:今天谁主动举手了,谁的作业错题集中在哪个题型,谁连续几天状态下滑……一学期下来,每个孩子的长处短板、学习节奏、情绪波动都清清楚楚,你就能因材施教。 在线教育平台的“学情画像”,就是给每个学生建一份这样的电子成长档案。只不过记录者不是班主任,而是平台系统;记录的不是课堂表现,而是每一次点击、停留、答题、回看视频的行为日志。这篇内容将带你走过从原始日志到画像成型的完整链路:先讲画像是什么、数据从哪来,再讲如何把行为序列变成模型能读的特征,如何估计知识掌握度,如何让画像随时间“活”起来,最后谈数据质量与监控这两道安全闸门。学完你会明白:一份会呼吸的学生档案,正是个性化学习的地基。
对 AI 从业者:学情画像是 AI+教育领域最成熟的落地方向之一,掌握这套构建链路可直接迁移到用户画像、智能推荐、风控建模等通用场景,是项目经历里的硬通货。
可视化演示
从原始行为日志到学情画像的完整链路:行为序列建模、知识掌握度估计与画像动态更新。切换模式可查看特征漂移监控。
本节配有交互动效(进入视口后自动加载,约 3KB)。
画像构建链路 行为日志经序列建模提炼学习特征 掌握度随练习频次动态更新 θ = argmax P(θ|D) 覆盖知识点越多,画像置信度越高
画像概念总览
开学第一周,班主任在档案本上为每个孩子建立“起始卡片”:姓名、入学测试成绩、性格备注、联系方式。卡片本身很简单,但它决定了后续所有记录的存放位置和分类标准。学情画像就是学习的“起始卡片”,只是它远比一张纸复杂——它是一个用数据刻画的结构化学习者模型。
画像不是某个单一分数,而是多维度的信息集合:静态属性(年级、教材版本、学科)基本不变;动态状态(当前知识掌握度、学习节奏)随每次交互而变;行为偏好(喜欢刷题还是看视频)描述学习方法。这些维度共同组成一段完整的学情档案,让机器能够“读懂”一个学生。
工程上,构建学情画像遵循一条固定流水线:采集原始行为日志 → 清洗与序列化 → 特征计算与服务化 → 更新与监控。每个环节环环相扣,前一步的输出就是后一步的输入。画像的形式化定义如下:
所以学情画像就像班主任档案本上那张会成长的卡片:一开始只有名字,随着一页页记录累积,卡片上的小字逐渐丰富,最终成为老师最趁手的教育工具。对平台而言,这张卡片就是个性化推荐、学习预警和教学干预的共同地基。
- 静态属性 S包括年级、学科、教材版本等入学信息,几乎不随学习行为变化,相当于档案上的“基本情况栏”。
- 知识向量 K对每个知识点维护一个掌握度数值,相当于各科的“评级栏”,是画像中最核心的动态信息。
- 行为偏好 B刻画学生习惯用何种方式学习(看视频、做题、讨论),以分布形式存储,相当于“学习风格备注”。
- 时效信息 T记录画像生成时间和最近更新时刻,衡量画像的新鲜度,相当于档案右下角的“填写日期”。
- 更新策略 U决定哪些事件触发重算、衰减速率多大,是画像能否保持“活”状态的关键设计,相当于班主任定的“每周五批注”规矩。
原始日志采集
班主任不可能凭记忆写档案,他需要一个标准格式的记录本:日期、科目、事件类型、备注。如果今天用红笔、明天用蓝笔、后天干脆写在纸条上,学期末整理时根本没法用。行为日志的“埋点规范”就是给全平台统一规定记录格式——每个事件必须有统一的命名、属性集合和时间戳。
采集到原始日志后并不能直接使用。系统要完成两件清洗工作:一是去重与去无效,比如双击产生的重复点击、加载失败导致的虚假停留,都要剔除掉;二是补全关键字段,缺失 session_id 或 user_id 的日志直接丢弃。这些预处理步骤单独看起来枯燥,却决定了画像精度的上限——脏数据进来,画像必脏。
清洗完的日志还要做“会话切分”:一个学生可能上午学 10 分钟数学、晚上学 30 分钟英语,必须把连续的操作流切成一个个学习单元,后续的序列建模才有所依附。切分依据通常是事件间的时间空隙:
规范的日志就像班主任手写的笔记,字迹工整、格式统一,后续无论做统计还是建模都不会“看错字”。好的埋点体系能长期稳定地运转数年,为整条画像链路节省大量返工成本。
- 事件间隔计算相邻两个行为事件的时间差,等价于问“上一次操作和下一次操作隔了多久”。
- 切分阈值领域专家设定的超时上限,超过它说明学习场景已中断,适合行业默认值 30 分钟。
- 切分判定间隔大于阈值时产生切分信号,把这一刀切在两个事件之间,形成两个独立会话。
行为序列建模
班主任不光记录“小明做了练习题”,更关心“他是先看例题再做题,还是直接蒙答案”。顺序不同,诊断结论完全不同:前者说明有策略地巩固,后者可能是在盲目试错。行为序列建模要解决的核心问题,就是让机器能够“读顺序”。
第一步是行为编码:把“看视频”“答题”“暂停”“回看”等离散事件映射成稠密向量。与直接给事件编号相比,向量表达能自动学习事件之间的语义相似度(“看视频”与“回看”较近,与“答错”较远)。第二步是将整条序列送入编码器,让每个位置携带上下文信息。最后通过注意力机制,让模型重点关注与学习结果最相关的行为。
特征融合的数学表达简洁而优雅:序列向量是各时间步上下文表示的注意力加权和。
就像班主任从“先复习后作业”与“先作业后抄答案”中读出学习习惯,序列建模把顺序变成模型能直接消费的特征。有了它,画像不再是一堆孤立事件的罗列,而是一段有情节的学习故事。
- 上下文向量编码器把第 t 个行为与其前后行为融合后产生的表示,等价于“班主任结合前后文理解这一步动作”。
- 注意力权重通过打分函数计算每个时间步的重要性,全部权重归一化为概率分布,和等于一。
- 加权求和用权重把各步上下文合成一个定长向量,作为下游掌握度预测的行为侧特征。
知识掌握度估计
学期中,班主任要在档案的“科目评级”栏写 A/B/C。评级不能只看期末一次考试,也不能只看作业是否正确——题目有难易,学生有状态。知识掌握度估计要解决的正是“科学打分”的问题:基于学生的历史作答记录,估计出每个知识点的真实掌握水平。
最简单的基础指标是正确率,统计学生在知识点 k 上所有题目的正确比例。但直接使用它有两个陷阱:一是题目难度不齐,做对 10 道简单题与做对 1 道压轴题不能等价;二是样本量差异大,只做过 2 题的考点比做过 50 题的考点置信度低得多。因此工程上会对正确率做平滑与难度加权:
进一步地,现代测评理论(IRT)把学生能力与题目难度放到同一把尺子上比对:学生能力高于题目难度越多,答对概率越高。
像班主任知道“小明能独立解出压轴题,说明功力真到了 A”,难度校准正是把“这道题有多难”这个信息织进掌握度,避免简单题刷出虚高分。
- 能力与难度之差同一尺度上比较学生能力与题目难度,差值代表“这道题对他而言有多简单”。
- 指数化将差值放入指数函数,映射到正数范围,保持单调性。
- 逻辑斯蒂变换将任意实数压缩到 0 到 1 之间,输出即为答对概率,也是掌握度的概率化解释。
画像动态更新
档案不能开学写一次就封存。小明期中前状态火爆,期末因家里事状态下滑,档案必须跟着变;更重要的是,遗忘是人的天性——天天练的公式一个月不碰就生疏。动态更新机制就像班主任的规矩:每周更新档案,同时按遗忘曲线修正评级。
工程上,动态更新由三层机制共同完成:事件驱动、衰减机制、画像快照。事件驱动指关键行为(完成一次单元测验、连续答错三次)立即触发画像重算,而不是等定时任务;衰减机制让长期不复习的掌握度随时间回落;画像快照则定期把当前画像存档,用于历史对比和效果归因。
衰减机制的数学模型沿用了经典的遗忘曲线思想:掌握度随时间指数衰减,衰减快慢由速率参数控制。
值得注意的是,衰减不是单向的惩罚——只要学生产生新的作答事件,画像就会用最新统计结果覆盖旧值,相当于“复习一次,刷新遗忘时钟”。这正是模拟人类记忆规律的关键:既有遗忘,也有通过练习的再巩固。事件驱动与衰减机制配合,让档案永远处于“与现实同步”的状态。
- 初始掌握度最近一次学习事件发生时更新的掌握度,是衰减的起点,相当于“刚复习完时的最佳水平”。
- 时间间隔从上次学习到当前时刻经过的时间,单位常取天或小时。
- 衰减系数指数项随 Δt 增大单调递减,乘以初始值后得到当前掌握度;λ 控制遗忘速度。
数据质量保障
档案本上要是有人恶作剧写“小明一天学习了 25 小时”,班主任一眼就会划掉。但机器没有班主任的直觉,必须靠质量规则来“划掉脏数据”。数据质量保障是画像工程最容易忽略、却也最致命的一环:模型再先进,也救不了一本错误百出的档案。
第一道防线是缺失处理。行为日志常见字段缺失:没有 user_id 的事件无法归属任何人,没有 knowledge_point 的作答无法用于掌握度统计。对这些数据的处理策略包括:丢弃、按默认值补全、或用邻域信息推断。第二道防线是异常检测:通过统计规则识别明显不合理的记录,例如时长超长、频率骤增等。第三道防线是标注规范:对知识点映射、题目难度等人工标注环节制定统一标准,减少标注者的主观偏差。
异常检测的常用统计量是 z-score,衡量一个数值偏离总体平均水平多少个标准差:
高质量的输入才配得上一份“字迹干净、可信可靠”的档案。数据质量保障不是一个一次性的清洗任务,而是一套伴随画像全生命周期的常态化机制,每一批新数据进来都要过一遍同样的安检。
- 偏离量先看目标值与均值的绝对差,衡量“偏离了多少”。
- 标准化把偏离量除以标准差,得到以标准差为单位的偏离程度,便于跨指标比较。
- 异常判定经验法则认为 |z|>3 的记录属于小概率事件,进入待核查队列,再由业务规则二次确认。
特征漂移监控
班主任的档案里若一直沿用“爱举手=积极”这条标准,可这学期学生改用线上弹幕互动来表达积极,老标准就失灵了。特征漂移就是这种“衡量标准随环境变化而失效”的现象:模型上线时训练数据的分布,与线上真实数据分布之间出现了明显偏移。
漂移的来源很多:教材改版导致知识点结构变化、产品改版导致行为口径变化、假期与学期的学习节奏差异、甚至一届新生的整体水平波动。若不监控,画像会从“可靠”悄悄变成“失真”,而下游推荐和预警却不会立刻感知。常见监控指标之一是 PSI(群体稳定性指数),它量化两个分布的差异程度:
告警之后的处置路径很清晰:先定位漂移来自哪个特征、分析原因(产品改版还是生源变化),再选择重训模型、修正特征口径、或调整业务规则。持续监控就像班主任定期反思自己的记录标准是否还适用,只有不断校准,档案才不会在时间的侵蚀下失真。
- 分箱占比将连续特征值域划分为若干区间(箱),分别统计基准分布与当前分布的样本比例。
- 每个箱的贡献两占比之差乘以对数之比,当两占比完全相等时该项为 0,差异越大贡献越大。
- 汇总与阈值把所有箱的贡献加总得到 PSI 值,按行业惯例 0.1 以下稳定、0.25 以上触发告警。
AI 应用场景
智能组卷与个性化刷题
阶段:画像应用(知识掌握度估计 + 画像动态更新)
解决的问题:传统组卷面向全班统一出题,学霸觉得太简单、学困生觉得跟不上,刷题效率低下。基于学情画像的掌握度向量,系统可以为每个学生动态生成“最近发展区”的题目组合:掌握度高的知识点少出题保持热度,掌握度低的知识点从基础题逐步升级到难题。
具体案例:某 K12 数学平台上线个性化刷题后,学生在薄弱知识点上的平均练习量提升 40%,单元测验正确率提升 12%。画像中的衰减机制还会在检测到某考点长期未刷时,自动推送复习题,模拟了班主任“这个知识点该回头看看了”的提醒。
学习预警与教学干预
阶段:画像服务化(行为序列建模 + 异常检测)
解决的问题:传统教学中教师只能通过作业和考试发现学生掉队,反馈严重滞后。通过实时画像,系统能根据行为序列异常(做题正确率骤降、学习时长骤减、退出频率升高)提前计算“掉队风险分”,在问题恶化前预警。
具体案例:某在线英语平台为每位学生维护实时画像,当画像中出现“连续 5 次练习正确率低于 30%”或“7 天无学习行为”时,系统自动通知助教介入,同时向学生推送激励机制。上线一个学期,课程完课率提升 18%,退课率下降 9%。
班级画像与教学节奏调整
阶段:画像应用(画像快照 + 特征漂移监控)
解决的问题:直播大班课教师对全班掌握情况只有模糊感知,难以判断应该提速还是复习。利用班级层面的画像聚合(全班掌握度分布 + 行为偏好分布),教师能在课前看到知识热力图,精准定位班级共性薄弱点。
具体案例:某素质教育机构在双师课堂中使用班级画像看板,主讲老师根据“函数单调性班级掌握度 61% 且近三日持续下降”的监控提示,临时插入一节专题复习课。课后掌握度回升至 82%,课堂满意度提升明显。
Python 演示
import mathfrom datetime import datetime, timedelta class StudentProfile: """在线学习场景下的学情画像构建 Demo(简化版)""" def __init__(self, student_id, decay_rate=0.02): self.student_id = student_id self.decay_rate = decay_rate # 知识点 -> {"count": 做题数, "correct": 正确数, "last_ts": 最近时间戳} self.knowledge_map = {} self.event_count = 0 def record_events(self, events): """把一次行为事件序列写入画像(事件驱动更新核心)""" for ev in events: kp = ev["knowledge_point"] stat = self.knowledge_map.setdefault( kp, {"count": 0, "correct": 0, "last_ts": ev["ts"]} ) stat["count"] += 1 stat["correct"] += 1 if ev["is_correct"] else 0 stat["last_ts"] = max(stat["last_ts"], ev["ts"]) self.event_count += 1 def apply_decay(self, now=None): """时间衰减:很久没练习的知识点,掌握度缓慢回落""" if now is None: now = datetime.utcnow() for stat in self.knowledge_map.values(): days_pass = max((now - stat["last_ts"]).total_seconds() / 86400, 0.0) stat["correct"] = max( stat["correct"] - self.decay_rate * days_pass * stat["count"], 0 ) def mastery(self, kp): """知识掌握度:平滑后的正确率""" stat = self.knowledge_map.get(kp) if stat is None or stat["count"] == 0: return 0.0 return stat["correct"] / stat["count"] def snapshot(self): """导出当前画像快照""" return { "student_id": self.student_id, "event_count": self.event_count, "mastery": {kp: round(self.mastery(kp), 3) for kp in self.knowledge_map}, } def make_events(student_id, kp_list, base_ts, correct_flags): """把原始日志构造为行为事件列表(原始日志采集模拟)""" events = [] for i, kp in enumerate(kp_list): events.append({ "student_id": student_id, "knowledge_point": kp, "ts": base_ts + timedelta(minutes=5 * i), "is_correct": correct_flags[i], }) return events def main(): base_ts = datetime(2025, 1, 1, 9, 0, 0) # 模拟一名学生在 4 个知识点上的 8 次练习 events = make_events( "stu_001", ["一元二次方程", "函数单调性", "一元二次方程", "三角函数", "函数单调性", "三角函数", "一元二次方程", "函数单调性"], base_ts, [True, False, True, True, True, False, True, True], ) profile = StudentProfile("stu_001") profile.record_events(events) print("更新前画像:", profile.snapshot()) # 两周后用户没有复习,画像自动衰减 profile.apply_decay(now=base_ts + timedelta(days=14)) print("衰减后画像:", profile.snapshot()) if __name__ == "__main__": main()
stat = self.knowledge_map.setdefault(kp, {"count": 0, "correct": 0, "last_ts": ev["ts"]})为每个知识点开辟独立的统计槽位,相当于档案上为每科单独开一页。stat["correct"] += 1 if ev["is_correct"] else 0累计正确次数,这是掌握度的分子基础。days_pass = max((now - stat["last_ts"]).total_seconds() / 86400, 0.0)计算距离上次练习过去了多少天,max 防止时钟回拨产生负值。stat["correct"] = max(stat["correct"] - self.decay_rate * days_pass * stat["count"], 0)核心衰减公式:时间越长、原始题量越大,正确数扣减越多,但不会扣成负数。return stat["correct"] / stat["count"]掌握度定义为平滑后正确次数占总题量的比例,直观可解释。profile.record_events(events)注入行为事件流,触发画像的更新。profile.apply_decay(now=base_ts + timedelta(days=14))模拟两周未学习后的画像状态,展示遗忘规律对画像的影响。
常见误区
误区做学情画像就是堆数据,把埋点日志能采多少采多少,后面反正可以用大数据技术慢慢清洗,数据量上去了画像自然就准了。
正解这是典型的“垃圾进、垃圾出”误区。无规范的埋点日志里充满了重复点击、无效停留、字段缺失的脏数据,直接进入画像会产生系统性偏差。就像档案本里塞满潦草字条,班主任反而找不到重点。埋点规范决定数据质量上限,清洗规则决定画像下限,先定标准再谈规模。
为何常见:大数据时代的直觉是“多多益善”,但忽略了画像对数据可信度的硬性要求,且清洗脏数据的人工成本往往远超预期。
误区一个学生在知识点上做了 100 道题、对了 80 道,那他的掌握度就是 0.8。题目难度不重要,反正都是这个知识点的题,按对错比例算准没错。
正解正确率只是原始素材,不是最终掌握度。若 80 道对的全是简单题、20 道错的全是压轴题,真实掌握度远低于 0.8。难度校准正是要把“题目有多难”这个信息织入计算——难题做对一次,抵得上简单题做对十次。另外,长期不复习的学生即使历史正确率高,当前掌握度也应按遗忘曲线回落。
为何常见:正确率是人类最容易理解的统计量,直觉上“做对的占比”等于“掌握的程度”,忽略了题目难度分布和遗忘这两个关键事实。
误区学情画像是一个一次性项目,开学初花两周建好,生成一张学生能力表,然后整个学期都按这张表做推荐和分组就行。
正解学生学习状态天天在变,教材大纲会改版,产品交互方式会调整,甚至假期回归后整体行为分布都会漂移。固定画像不仅会过时,还会让下游系统基于错误信息做决策。正确做法是事件驱动实时更新 + 定期快照 + 特征漂移监控三重机制并行,保证画像与真实状态同步。
为何常见:把画像误解为“建库”而非“运维”,忽视了画像是一个需要持续治理的生命体,这也是线下做档案的惯性思维。
误区学情特征就是把行为日志按类型计数:看视频几次、做题几次、暂停几次,把计数拼成特征向量就行,顺序信息对画像没什么用。
正解顺序中藏着学习策略。“先看例题再做题”与“先蒙答案再看解析”判若云泥,计数特征完全无法区分。行为序列建模通过编码器融合顺序信息、用注意力机制突出关键步骤,才能捕捉这类深层模式。就像菜谱颠倒了步骤顺序,做出的菜完全不是同一个味道。
为何常见:计数特征简单易得、可解释性强,容易让人误以为“量”已足够,忽略了学习过程本身就是强序列数据的本质。
面试题
Q1. 学情画像最基础的数据源头通常来自哪里?
- A.平台行为日志记录← 正确答案
- B.教师主观评价记录
- C.期末考试成绩单
- D.学生报名信息表
答案:A。学情画像的核心是过程性数据,即学生每次点击、答题、观看视频的行为日志,它高频且客观。教师评价、考试成绩、报名信息虽然也有用,但要么低频要么静态,只能作为画像的补充维度而非主要源头。
Q2. 小明在“简单题题库”里刷了 200 道全对,系统却判断他的掌握度并非满分,最可能的原因是什么?
- A.未考虑题目难度校准← 正确答案
- B.未压缩日志存储空间
- C.未合并多个学生画像
- D.未使用注意力机制
答案:A。只做简单题的正确率无法证明对难题的掌握,掌握度估计必须引入难度校准,让难题权重更高。这与“只会背简单单词不能说明英语好”是同一个道理。存储、画像合并、注意力机制与这个具体判断无直接关系。
Q3. 学生持续学习且正确率稳定时,画像系统应采用什么原则来更新档案?
- A.事件驱动实时更新← 正确答案
- B.每天午时全量重算
- C.学期末集中汇总
- D.建好后不再更新
答案:A。画像服务于实时推荐与预警,应采用事件驱动机制:关键行为发生后立即触发更新,保证下游拿到的永远是最新状态。定时全量或期末汇总都会造成时效性损失,不符合“动态画像”的定义。
Q4. 学生上周掌握“一元二次方程”,本周完全转向其他内容,画像对该知识点的掌握度应如何处理?
- A.保留原样永不变化
- B.按时间衰减逐步回落← 正确答案
- C.直接删除该知识点
- D.复制给所有新同学
答案:B。遗忘是学习过程的客观规律,长期不复习的知识点应通过衰减机制逐步回落,这正是遗忘曲线建模的意义。直接保留会导致画像失真,删除则会丢失历史信息,复制给他人更是荒谬。
Q5. 下列哪些做法能有效提升学情画像的数据质量?
- A.规范统一日志埋点格式← 正确答案
- B.清洗重复和缺失事件← 正确答案
- C.忽略所有超时答题记录
- D.建立异常数据检测机制← 正确答案
答案:ABD。埋点规范从源头保证格式统一,清洗去除重复与缺失,异常检测识别“一天学习 25 小时”这类不合理数据,三者是质量保障的完整闭环。而“忽略所有超时答题”是错误操作——超时答题仍包含学习行为信息,一刀切忽略会造成数据浪费。
Q6. 特征漂移指的是下列哪种情况?
- A.用户习惯改变导致分布变化← 正确答案
- B.服务器磁盘发生物理位移
- C.学生从甲教室换到乙教室
- D.课程视频文件被移动位置
答案:A。特征漂移指模型输入数据的分布随时间发生变化,常见诱因包括产品改版、用户结构变化、学习节奏变化等。一旦漂移累积到一定程度,画像模型就会失真。其余选项均属于物理世界或存储层面的变化,与数据分布无关。
Q7. 行为序列建模中“注意力加权”的主要作用是什么?
- A.突出与结果最相关的行为← 正确答案
- B.让所有行为权重完全相等
- C.删除序列中最长的行为
- D.把全部行为压缩成单点
答案:A。注意力机制让模型学习每个行为的重要度,例如“答对难题”比“看了 3 分钟视频”对掌握度预测更关键,从而在特征融合时给予更高权重。若让所有权重相等,就退回了简单平均,失去了序列建模的意义。
Q8. 会话切分过程中,哪些信号可以作为切分依据?
- A.相邻事件时间间隔过大← 正确答案
- B.学生主动退出登录账号← 正确答案
- C.页面停留时间持续为零
- D.登录设备发生跨平台更换← 正确答案
答案:ABD。时间间隔超过阈值、主动登出、跨设备切换(通常伴随重新鉴权)都意味着一次学习会话的边界。页面停留时间为零属于异常数据,应走异常检测流程而非作为切分信号。
Q9. 关于画像动态更新中的衰减机制,下列说法正确的有哪些?
- A.时间越长掌握度回退越多← 正确答案
- B.衰减速率可设学习参数← 正确答案
- C.复习行为能阻止继续衰减← 正确答案
- D.衰减后没有恢复的可能
答案:ABC。衰减机制模拟遗忘曲线:时间间隔越长,掌握度回落越多;衰减速率 λ 可通过数据拟合得到,属于可学习参数;复习产生新事件会刷新最近学习时间并用新统计覆盖旧值,相当于重置遗忘时钟。衰减后当然能恢复——否则复习就没有意义了。
Q10. 在 IRT 逻辑斯蒂模型中,学生能力 θ 固定而题目难度 b 增大时,答对概率会怎样变化?
- A.概率持续下降且逼近下限← 正确答案
- B.概率持续上升趋向于一点
- C.概率保持恒定完全不变化
- D.概率先升后降呈倒 U 型
答案:A。P=1/(1+e^{-(θ-b)}),θ 固定时 b 增大使 θ−b 变小,指数项 e^{-(θ-b)} 变大,分母变大,概率单调下降并趋近 0。这与“能力不变、题目变难,做对可能性必然降低”的直觉一致,也解释了为什么难度校准对掌握度估计不可或缺。