版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年数据人员面试题库及答案1.请用SQL实现最近7天用户登录次数的统计,要求按用户分组并显示每天的记录,包含用户ID、日期、登录次数,且结果按日期升序排列。若某用户某天未登录则显示0次。答案:可使用递归CTE提供最近7天的日期维度表,再与用户登录记录表进行左连接,通过COUNT()窗口函数或GROUPBY分组统计。示例代码:WITHRECURSIVEdate_rangeAS(SELECTCURRENT_DATEINTERVAL'6days'ASdtUNIONALLSELECTdt+INTERVAL'1day'FROMdate_rangeWHEREdt<CURRENT_DATE)SELECTu.user_id,d.dtASlogin_date,COALESCE(COUNT(l.login_time),0)ASlogin_countFROMdate_rangedCROSSJOIN(SELECTDISTINCTuser_idFROMuser_login_log)uLEFTJOINuser_login_loglONu.user_id=l.user_idANDDATE(l.login_time)=d.dtGROUPBYu.user_id,d.dtORDERBYlogin_date,user_id;关键点:通过RECURSIVECTE提供连续日期解决缺失日期问题,CROSSJOIN提供用户-日期笛卡尔积,COALESCE处理未登录情况。2.在A/B测试中,若实验组转化率比对照组高2%,但统计检验p值为0.15,是否应推广实验组?请说明判断逻辑。答案:不应直接推广。需结合以下维度分析:(1)统计显著性:通常以p<0.05为显著,0.15未达到临界值,可能是随机波动导致;(2)实际显著性:2%的绝对提升需评估业务价值,若成本低、用户基数大仍可能有意义;(3)检验效能:检查样本量是否足够(如功效是否≥0.8),小样本可能导致假阴性;(4)数据质量:确认实验分组是否随机、是否有用户泄露(如同时进入两组)、是否存在时间效应(如实验周期覆盖特殊事件)。综合建议:扩大样本量重新测试,或结合置信区间(如95%CI包含0则不显著)辅助判断。3.现有一份用户行为数据,包含用户ID、事件时间(event_time,时间戳)、事件类型(event_type,如点击、下单),需计算用户从首次点击到首次下单的平均转化时长。请描述具体实现步骤(工具不限)。答案:步骤如下:(1)数据清洗:过滤异常时间(如event_time为未来或早于系统上线时间),去重(同一用户同一事件同一时间的重复记录);(2)用户级事件排序:按用户分组,按event_time升序排列,标记每条记录的事件顺序;(3)提取关键事件:对每个用户,找到最早的点击事件(first_click_time)和最早的下单事件(first_order_time),需满足first_order_time>first_click_time;(4)计算转化时长:对存在有效转化的用户,计算first_order_timefirst_click_time,取平均值;(5)处理无转化用户:若需整体平均,可将无下单用户的时长记为NULL或剔除,需明确业务定义(如只计算转化用户或包含未转化用户)。工具实现示例(Python):importpandasaspddf=pd.read_csv('user_events.csv')df['event_time']=pd.to_datetime(df['event_time'])按用户分组排序sorted_events=df.sort_values(['user_id','event_time']).groupby('user_id')提取首次点击和首次下单时间first_click=sorted_events.apply(lambdax:x[x['event_type']=='点击']['event_time'].min()).reset_index(name='first_click')first_order=sorted_events.apply(lambdax:x[x['event_type']=='下单']['event_time'].min()).reset_index(name='first_order')合并并计算时长merged=pd.merge(first_click,first_order,on='user_id',how='left')merged['duration']=(merged['first_order']merged['first_click']).dt.total_seconds()过滤无效转化(下单时间早于点击或无下单)valid_merged=merged[merged['duration']>0]avg_duration=valid_merged['duration'].mean()4.描述使用Python进行特征工程的完整流程,需包含至少5个关键步骤,并说明每个步骤的目的。答案:完整流程包括:(1)数据理解:通过describe()、info()、可视化(如直方图、箱线图)分析特征分布(均值、方差、缺失率)、数据类型(数值/类别)、异常值,目的是明确特征质量和潜在问题;(2)缺失值处理:对缺失率>70%的特征考虑删除,剩余用均值/中位数(数值)、众数/新增类别(类别)填充,或用模型(如KNN)预测填充,目的是避免模型训练时的信息丢失;(3)异常值处理:通过IQR(Q3+1.5IQR)或Z-score(|Z|>3)识别,对业务合理的异常保留(如高消费用户),不合理的用分位数截断或转换(如对数变换),目的是减少对模型的干扰;(4)特征转换:对类别特征用独热编码(OneHot)或目标编码(TargetEncoding,需防数据泄露),对数值特征用标准化(Z-score)或归一化(Min-Max),对时间特征提取小时/星期/是否节假日,目的是提升模型对特征的可解释性和学习效率;(5)特征选择:通过相关系数(如皮尔逊相关)、树模型的特征重要性(如XGBoost的feature_importances_)、递归特征消除(RFE)筛选关键特征,目的是降低维度、减少过拟合、提升计算效率;(6)特征构造:基于业务知识提供新特征(如点击次数/浏览时长=点击频率,订单金额-优惠金额=实际支付),目的是挖掘隐藏的业务逻辑关联。5.若需构建用户流失预测模型,你会如何评估模型效果?请列出至少4个指标并说明适用场景。答案:评估指标选择需结合业务目标(流失用户的定义、模型用途是预警还是精准营销):(1)准确率(Accuracy):(TP+TN)/(TP+TN+FP+FN),适用于正负样本平衡场景(如流失率≈50%),但流失预测通常是不平衡数据(如流失率5%),此时高准确率可能由多数类(未流失)主导,参考价值低;(2)精确率(Precision=TP/(TP+FP)):衡量模型预测为流失的用户中实际流失的比例,适用于营销成本高的场景(如短信/电话召回),需减少误触达(FP);(3)召回率(Recall=TP/(TP+FN)):衡量实际流失用户中被模型正确识别的比例,适用于流失成本高的场景(如高价值用户流失),需尽可能覆盖所有潜在流失用户;(4)F1-score=2(PR)/(P+R):精确率和召回率的调和平均,适用于需平衡两者的场景;(5)AUC-ROC(受试者工作特征曲线下面积):衡量模型对正负样本的区分能力,取值0.5~1,0.8以上为良好,适用于评估模型整体性能,不受样本不平衡影响;(6)KS值(Kolmogorov-Smirnov):最大累计正样本率与负样本率差异,常用在金融风控领域,反映模型区分度,通常>0.3为可接受。例如,若业务目标是用有限预算召回高流失用户(预算限制FP),则重点看精确率;若目标是尽可能减少用户流失(需覆盖更多FN),则重点看召回率;若需综合评估模型能力,优先AUC-ROC和KS值。答案:评估指标选择需结合业务目标(流失用户的定义、模型用途是预警还是精准营销):(1)准确率(Accuracy):(TP+TN)/(TP+TN+FP+FN),适用于正负样本平衡场景(如流失率≈50%),但流失预测通常是不平衡数据(如流失率5%),此时高准确率可能由多数类(未流失)主导,参考价值低;(2)精确率(Precision=TP/(TP+FP)):衡量模型预测为流失的用户中实际流失的比例,适用于营销成本高的场景(如短信/电话召回),需减少误触达(FP);(3)召回率(Recall=TP/(TP+FN)):衡量实际流失用户中被模型正确识别的比例,适用于流失成本高的场景(如高价值用户流失),需尽可能覆盖所有潜在流失用户;(4)F1-score=2(PR)/(P+R):精确率和召回率的调和平均,适用于需平衡两者的场景;(5)AUC-ROC(受试者工作特征曲线下面积):衡量模型对正负样本的区分能力,取值0.5~1,0.8以上为良好,适用于评估模型整体性能,不受样本不平衡影响;(6)KS值(Kolmogorov-Smirnov):最大累计正样本率与负样本率差异,常用在金融风控领域,反映模型区分度,通常>0.3为可接受。例如,若业务目标是用有限预算召回高流失用户(预算限制FP),则重点看精确率;若目标是尽可能减少用户流失(需覆盖更多FN),则重点看召回率;若需综合评估模型能力,优先AUC-ROC和KS值。6.现有一张订单表orders(order_id,user_id,order_time,amount),需计算每个用户的生命周期价值(LTV),假设用户生命周期为最后一次下单时间+180天未下单则视为流失。请写出计算逻辑(SQL或Python)。答案:LTV计算需明确用户生命周期结束时间,步骤如下:(1)计算用户各次下单时间间隔:对每个用户按order_time排序,计算相邻订单的时间差;(2)确定生命周期结束时间:若最后一次下单后180天内无新订单,则生命周期结束时间=最后一次下单时间+180天;若有新订单,则生命周期延续至最新订单时间+180天(需递归判断);(3)计算生命周期内总消费金额:用户所有订单时间≤生命周期结束时间的amount之和。Python实现示例(假设数据已按user_id分组排序):defcalculate_ltv(user_orders):user_orders=user_orders.sort_values('order_time')last_order_time=user_orders['order_time'].max()检查最后一次订单后180天是否有新订单(需与全局数据对比,此处简化为当前用户无后续订单)实际需关联所有用户订单,判断是否存在order_time>last_order_time且≤last_order_time+180天的记录此处假设当前用户无后续订单churn_time=last_order_time+pd.Timedelta(days=180)筛选生命周期内的订单ltv_orders=user_orders[user_orders['order_time']<=churn_time]returnltv_orders['amount'].sum()对所有用户应用ltv=orders.groupby('user_id').apply(calculate_ltv).reset_index(name='ltv')SQL实现需用窗口函数计算用户最后一次订单时间,再关联判断是否有后续订单:WITHuser_last_orderAS(SELECTuser_id,MAX(order_time)ASlast_order_time,LEAD(order_time)OVER(PARTITIONBYuser_idORDERBYorder_time)ASnext_order_timeFROMorders),user_churn_timeAS(SELECTuser_id,CASEWHENMAX(next_order_time)>last_order_time+INTERVAL'180days'THENlast_order_time+INTERVAL'180days'ELSEMAX(next_order_time)+INTERVAL'180days'ENDASchurn_timeFROMuser_last_orderGROUPBYuser_id)SELECTo.user_id,SUM(o.amount)ASltvFROMordersoJOINuser_churn_timectONo.user_id=ct.user_idANDo.order_time<=ct.churn_timeGROUPBYo.user_id;7.简述使用Spark进行海量数据处理时的优化策略,至少列出5点。答案:(1)分区优化:根据数据分布调整分区数(如使用repartition或coalesce),避免分区过小(任务数过多增加调度开销)或过大(单个任务内存溢出),通常分区数=CPU核心数×2~4;(2)缓存策略:对需要多次使用的RDD或DataFrame,使用persist(StorageLevel.MEMORY_AND_DISK)缓存,减少重复计算;(3)避免Shuffle:优先使用map-side操作(如map、filter),减少groupByKey、join等触发Shuffle的操作,需join时用BroadcastJoin(小表广播)替代ShuffleJoin;(4)数据类型优化:使用更紧凑的数据类型(如用Int代替Long,用Array代替List),减少内存占用;(5)并行度调整:通过spark.default.parallelism设置合理的并行度,匹配集群资源;(6)推测执行:启用spark.speculation=true,对运行缓慢的任务启动推测任务,避免单点延迟;(7)内存管理:调整spark.executor.memory(执行器内存)和spark.memory.fraction(存储与执行内存比例),避免OOM;(8)谓词下推:在读取数据源(如Hive、JDBC)时,将过滤条件(where子句)下推至数据源,减少数据传输量。8.在数据清洗过程中,如何处理“脏数据”?请结合具体场景说明至少3种常见问题的解决方法。答案:(1)缺失值:场景如用户年龄字段缺失。解决方法:①统计缺失率,若>80%且无业务意义则删除该字段;②数值型用中位数填充(避免均值受异常值影响),如年龄用用户分群(如城市、性别)的中位数填充;③类别型用众数填充或新增“未知”类别;④模型填充:用其他字段作为特征,训练回归/分类模型预测缺失值(如用收入、职业预测年龄)。(2)异常值:场景如订单金额出现负数或极大值(如100万元)。解决方法:①业务校验:负数可能是退款记录,需标记为退款并单独处理;②统计方法:用IQR法(Q1-1.5IQR到Q3+1.5IQR)识别,将超出部分截断为上下限;③转换处理:对右偏分布(如收入)进行对数变换,降低异常值影响。(3)不一致性:场景如用户城市字段存在“北京”“北京市”“beijing”等多种写法。解决方法:①正则匹配:用正则表达式统一格式(如提取“北京”作为标准值);②字典映射:建立标准城市字典,将别名、拼写错误映射到标准值(如“beijing”→“北京”);③人工核查:对少量无法自动处理的记录,人工确认后修正。(4)重复记录:场景如同一用户同一时间的多条相同订单。解决方法:按唯一键(如order_id)去重,或按业务规则(如保留最新记录)用row_number()窗口函数去重。9.若需分析“用户复购率下降”的原因,你会如何展开?请描述分析框架。答案:分析框架需遵循“数据验证→维度拆解→假设验证→结论输出”逻辑:(1)数据验证:确认复购率定义(如90天内购买≥2次的用户占比)、计算口径(是否包含促销订单、新老用户区分)是否与历史一致,排除统计错误;(2)时间趋势分析:查看复购率下降是突然发生(如某活动后)还是持续下降,结合关键时间节点(如竞品上线、平台规则变更);(3)用户分群拆解:按用户属性(新/老用户、地域、消费层级)、行为特征(首次购买金额、购买品类)分组,定位具体哪类用户复购率下降;(4)行为路径分析:对比复购用户与未复购用户的行为差异(如浏览时长、加购率、支付转化
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年潍坊市疾病预防控制中心校园招聘(7人)笔试备考题库及答案详解
- 2026年四川省德阳市事业单位人员招聘考试参考试题及答案详解
- 2026年湖北省荆州市事业单位人员招聘考试参考试题及答案详解
- 广东省东莞中学2026年物理八上期末质量跟踪监视试题含解析
- 2026重庆安诚财产保险股份有限公司招聘7人笔试历年参考题库附带答案详解
- 2026浙江宁波市鄞州区区属国企(宁波钱湖控股有限公司及下属公司)招聘笔试和现场笔试历年参考题库附带答案详解
- 速冻调制食品生产项目竣工验收报告
- 印刷厂印后加工细则
- 2026年吉林省四平市伊通满族自治县物理八年级第一学期期末质量检测试题含解析
- 河北省丰宁满族自治县2027届物理八上期末质量检测模拟试题含解析
- 2026年上海市高考(5月)化学真题卷(含答案与解析)
- 眼科超声生物显微镜(UBM)眼前节检查
- 2026年广东省佛山市中考历史一模试卷(含答案)
- 平安过暑假安全不放假-暑假假期安全主题班会课件
- 医学26年:骨髓增殖性肿瘤诊疗 查房课件
- 2026年医院皮肤科工作总结
- 2026年山东聊城市中考数学试题(附答案)
- 2026年大学GIS应用开发期末考前冲刺练习题库新版附答案详解
- 安全生产大排查自查问题隐患整改及长效措施
- 供热工程后评估技术方案
- 2026年高中物理会考冲刺押题卷
评论
0/150
提交评论