从零手写逻辑回归: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.csv | 6 位新客户,没有标签,用来检验模型实战效果 |
| 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(也就是各特征的权重)逐渐收敛。
完整预测流程一览

上图是仓库中一张手绘的机器学习预测管道示意图(来自植物疾病分类项目):输入数据 → 预处理 → 模型计算概率 → 输出预测结果。客户流失预测项目的流程与之完全同构:只是把"图片"换成了"客户特征",把"Top-1 分类"换成了"Sigmoid 概率 + 0.5 阈值"。
四、训练流程:5 个步骤一次跑通
notebook 的训练部分按以下顺序组织,每一步都只有一两行代码:
- 丢弃文本列:删掉
Names、Location、Company、Onboard_date,只留 5 个数值特征 - 划分训练/测试集:
train_test_split按 8:2 切分,random_state=42保证结果可复现 - 特征缩放:用
StandardScaler做标准化——这一步对手写梯度下降尤为关键,否则金额(上万)和年份(个位数)量级悬殊,梯度会"偏科" - 补上偏置列:在特征矩阵前拼一列 1,对应逻辑回归公式里的截距项
- 启动梯度下降:
theta从全 0 出发,迭代 1000 轮
跑完之后,测试集准确率达到88.9%——一个纯手写、没有任何"黑盒"的模型,已经相当能打了。✅
五、模型上线:预测 6 位新客户的流失风险
最后一步是项目的"灵魂":把训练好的模型应用到 new_customers_1.csv 中这 6 位没有标签的新客户上。流程与训练时完全一致——同样用scaler.transform缩放、同样补偏置列、同样用 Sigmoid 输出概率,概率大于 0.5 判为流失。部分预测结果:
| 新客户 | 年龄 | 使用年数 | 网站数 | 预测结果 |
|---|---|---|---|---|
| Andrew Mccall | 37 | 7.71 | 8 | 0 · 预计不流失 |
| Michele Wright | 23 | 9.28 | 15 | 1 · 预计流失 |
| (65 岁、仅 1 年、消费 100) | 65 | 1.00 | 15 | 1 · 预计流失 |
| (32 岁、无客户经理) | 32 | 9.40 | 14 | 1 · 预计流失 |
可以明显看到:使用年限短、消费低的客户被标记为高风险——这正是业务方想要的答案,也说明手写模型学到的权重是"讲道理"的。📊
六、如何快速跑通这个项目
一键安装步骤:
- 克隆仓库:
git clone https://gitcode.com/gh_mirrors/beg/Beginner-Data-Science-Projects - 进入项目目录安装依赖:
pip install -r requirements.txt(依赖见 requirements.txt,仅需 pandas、numpy、matplotlib、seaborn、scikit-learn) - 用 Jupyter 打开 customerChurn.ipynb,从头到尾运行,结尾即显示对新客户的预测结果
七、写在最后:新手能从这个项目学到什么
- 🧠Sigmoid、代价函数、梯度下降——三大组件各只有几行代码,手写一遍胜过读十遍教程
- ⚖️特征缩放的重要性:量级悬殊的特征会让梯度下降"偏科"
- 📌偏置项(截距)不能少:它是模型灵活度的来源
- 🚀训练与预测必须同一条预处理管道:缩放参数只能
fit一次,绝不能重新拟合
📁项目文件索引:
| 路径 | 说明 |
|---|---|
| Classification/Customer Churn/customerChurn.ipynb | 完整实现源码 |
| Classification/Customer Churn/customer_churn.csv | 900 条历史数据 |
| Classification/Customer Churn/new_customers_1.csv | 6 位待预测新客户 |
| 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),仅供参考