news 2026/9/29 4:43:22

从零手写逻辑回归:Beginner-Data-Science-Projects客户流失预测的实现原理(新手友好)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零手写逻辑回归:Beginner-Data-Science-Projects客户流失预测的实现原理(新手友好)

从零手写逻辑回归:Beginner-Data-Science-Projects客户流失预测的实现原理(新手友好)

【免费下载链接】Beginner-Data-Science-ProjectsThis repository is a curated collection of hands-on data science projects tailored for beginners. Whether you're just starting your journey in data science or looking to strengthen your skills, these projects provide a practical and interactive way to apply your knowledge.项目地址: https://gitcode.com/gh_mirrors/beg/Beginner-Data-Science-Projects

Beginner-Data-Science-Projects 是一个面向新手的数据科学实战项目合集,其中的 Customer Churn(客户流失预测)项目没有调用任何现成的分类器,而是完全从零手写逻辑回归:自己实现 Sigmoid 函数、代价函数与梯度下降,训练出一个测试集准确率高达 88.9% 的二分类模型,并用它预测新客户的流失风险。本文用通俗易懂的方式,带你彻底看懂这个客户流失预测项目的实现原理。🎓

一、客户流失预测要解决什么问题?

先讲一个小故事:某营销代理公司为大量客户网站制作广告,最近发现客户"跑单"(流失)现象严重。公司目前只是随机分配客户经理,希望用一个机器学习模型来回答:

哪些客户最可能流失?好让我们优先给他们安排客户经理。

于是他们提供了两份数据:一份是带有历史流失标签的记录,一份是没有标签的新客户——模型训练完成后,要直接"上线"去预测这些新客户会不会流失。

这正是分类任务中的经典问题——二分类:目标变量只有两个取值(1 = 流失,0 = 未流失)。

为什么逻辑回归是这类问题的首选?

逻辑回归(Logistic Regression)虽然名字里有"回归",其实是一个分类模型,它有三个天然优势:

  • 🎯输出是概率:直接给出"流失的可能性"(0~1 之间),方便按风险高低排序
  • 🔍可解释性强:每个特征的权重能直接看出它对流失的影响方向和大小
  • ⚡训练快、门槛低:几十行代码就能从零实现,是新手理解机器学习的第一站

二、先认识项目数据:两个 CSV 文件

项目位于Classification/Customer Churn/目录下,核心文件如下:

文件作用
customer_churn.csv历史数据,共 900 条客户记录,含流失标签
new_customers_1.csv6 位新客户,没有标签,用来检验模型实战效果
customerChurn.ipynb完整实现流程:从数据加载到新客户预测
README.md项目说明与运行方法

历史数据共 9 个字段,其中只有 5 个数值型特征会真正进入模型:

特征含义
Age客户年龄
Total_Purchase累计广告购买金额
Account_Manager是否分配了客户经理(0/1)
Years作为客户多少年
Num_Sites使用服务的网站数量
Churn标签:是否流失(1 = 流失)

而Names、Location、Company、Onboard_date这些文本字段对模型没有意义,会被直接丢弃——只保留数值特征,这是手写模型前最朴素也最重要的一步。

三、手写逻辑回归:3 个小函数就够了

整个模型的核心代码只有三个函数,全部在 customerChurn.ipynb 中定义。

3.1 Sigmoid 函数:把任意数值"压"成概率

def sigmoid(z): return 1/(1+np.exp(-z))

它是一条漂亮的 S 形曲线:输入z可以是任意实数,输出永远落在 0~1 之间。可以把它理解为"翻译官"——把特征加权和这种"无限量程"的数,翻译成"流失概率":z越大,概率越接近 1。

3.2 代价函数:衡量模型"错得有多离谱"

逻辑回归使用**对数损失(Log Loss)**作为代价函数:模型预测的越接近真实标签,代价越低;预测得离谱(比如真实流失却输出 0.01),代价就指数级地爆炸。代价函数同时返回梯度grad——告诉模型"该往哪个方向调整参数"。

3.3 梯度下降:一步步走向正确答案

训练循环只有一行核心更新:

theta -= alpha * grad # 每次朝代价减小的方向挪一小步

学习率alpha = 0.01,迭代 1000 次。每走一步,模型都变得更"懂"数据一点,代价曲线一路下降,参数theta(也就是各特征的权重)逐渐收敛。

完整预测流程一览

![机器学习预测流程示意:数据经预处理和模型计算概率后,输出客户流失预测结果](https://raw.gitcode.com/gh_mirrors/beg/Beginner-Data-Science-Projects/raw/3b80273620b6f12339b66ecf4789eff36aa5bec9/Computer Vision/Plant Disease CNNs/img/flow1.png?utm_source=gitcode_repo_files)

上图是仓库中一张手绘的机器学习预测管道示意图(来自植物疾病分类项目):输入数据 → 预处理 → 模型计算概率 → 输出预测结果。客户流失预测项目的流程与之完全同构:只是把"图片"换成了"客户特征",把"Top-1 分类"换成了"Sigmoid 概率 + 0.5 阈值"。

四、训练流程:5 个步骤一次跑通

notebook 的训练部分按以下顺序组织,每一步都只有一两行代码:

  1. 丢弃文本列:删掉Names、Location、Company、Onboard_date,只留 5 个数值特征
  2. 划分训练/测试集:train_test_split按 8:2 切分,random_state=42保证结果可复现
  3. 特征缩放:用StandardScaler做标准化——这一步对手写梯度下降尤为关键,否则金额(上万)和年份(个位数)量级悬殊,梯度会"偏科"
  4. 补上偏置列:在特征矩阵前拼一列 1,对应逻辑回归公式里的截距项
  5. 启动梯度下降:theta从全 0 出发,迭代 1000 轮

跑完之后,测试集准确率达到88.9%——一个纯手写、没有任何"黑盒"的模型,已经相当能打了。✅

五、模型上线:预测 6 位新客户的流失风险

最后一步是项目的"灵魂":把训练好的模型应用到 new_customers_1.csv 中这 6 位没有标签的新客户上。流程与训练时完全一致——同样用scaler.transform缩放、同样补偏置列、同样用 Sigmoid 输出概率,概率大于 0.5 判为流失。部分预测结果:

新客户年龄使用年数网站数预测结果
Andrew Mccall377.7180 · 预计不流失
Michele Wright239.28151 · 预计流失
(65 岁、仅 1 年、消费 100)651.00151 · 预计流失
(32 岁、无客户经理)329.40141 · 预计流失

可以明显看到:使用年限短、消费低的客户被标记为高风险——这正是业务方想要的答案,也说明手写模型学到的权重是"讲道理"的。📊

六、如何快速跑通这个项目

一键安装步骤:

  1. 克隆仓库:git clone https://gitcode.com/gh_mirrors/beg/Beginner-Data-Science-Projects
  2. 进入项目目录安装依赖:pip install -r requirements.txt(依赖见 requirements.txt,仅需 pandas、numpy、matplotlib、seaborn、scikit-learn)
  3. 用 Jupyter 打开 customerChurn.ipynb,从头到尾运行,结尾即显示对新客户的预测结果

七、写在最后:新手能从这个项目学到什么

  • 🧠Sigmoid、代价函数、梯度下降——三大组件各只有几行代码,手写一遍胜过读十遍教程
  • ⚖️特征缩放的重要性:量级悬殊的特征会让梯度下降"偏科"
  • 📌偏置项(截距)不能少:它是模型灵活度的来源
  • 🚀训练与预测必须同一条预处理管道:缩放参数只能fit一次,绝不能重新拟合

📁项目文件索引:

路径说明
Classification/Customer Churn/customerChurn.ipynb完整实现源码
Classification/Customer Churn/customer_churn.csv900 条历史数据
Classification/Customer Churn/new_customers_1.csv6 位待预测新客户
Classification/Customer Churn/README.md项目说明文档

如果你刚接触机器学习,建议按"先读懂三个函数 → 自己敲一遍 → 换一组特征重跑"的顺序来,这是把这个客户流失预测项目价值榨干的最好方式。

【免费下载链接】Beginner-Data-Science-ProjectsThis repository is a curated collection of hands-on data science projects tailored for beginners. Whether you're just starting your journey in data science or looking to strengthen your skills, these projects provide a practical and interactive way to apply your knowledge.项目地址: https://gitcode.com/gh_mirrors/beg/Beginner-Data-Science-Projects

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 4:42:48

ROS机械臂MoveIt规划配置与执行链路实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 4:42:24

Qoder安装配置实战:从AI编程环境搭建到C++项目高效开发

市面上 AI 编程工具多到看不过来,但我还是想单独写一篇 Qoder 的安装和使用教程。原因很简单:我把它当作主力编辑器从第一行代码开始用过一段时间,从最初的"这不就是个带聊天的编辑器"到后面的"干活确实顺手"&#xff0c…

作者头像 李华
网站建设 2026/9/29 4:39:45

推荐一个测试人必备的 Skills:TaoToken 统一 Key 接入 Claude Code 跑通 Playwright 与 JMeter 全流程(附配置骨架与验证动作)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华