宾夕法尼亚大学运用数据笔记-全-

宾夕法尼亚大学运用数据笔记(全)

第二三部分 1:专项课程简介

概述

在本节课中,我们将要学习宾夕法尼亚大学提供的《如何运用数据》专项课程的整体结构与核心内容。该课程旨在帮助初学者掌握数据分析、预测分析和数据可视化的基本技能,为进入数据领域打下坚实基础。

在数字时代,数据无处不在,塑造着我们日常的决策。它正在变革行业、驱动创新并创造新的机遇。欢迎来到我们的Coursera专项课程《如何运用数据》。这是一个关键的门户,专为任何渴望挖掘数据潜力的人设计,无论其先前经验如何。探索数据的旅程从这里开始,你将在此解锁数据分析、数据科学和数据工程的基础知识。本专项课程是你穿越不断演变的数据领域的综合指南,提供实用的技能和见解,这些技能和见解将随着技术进步而保持其相关性。

我们生活在一个数据触及我们存在各个角落的时代,从企业的战略制定到微小的个人便利,数据是塑造我们世界的一股无形力量。然而,尽管数据无处不在,驾驭这片广阔信息海洋的能力仍未普及。本专项课程旨在弥合这一差距,为你提供工具,使数据不仅可理解,而且可操作。其核心是将信息转化为洞察,再将洞察转化为影响力。

数据分析、预测分析和数据可视化不仅仅是当代的流行语,更是现代技能组合的支柱,这些技能在未来技术演进过程中将长期保持其价值。随着技术的发展,我们与数据交互的方式也会变化。然而,你在此学到的核心原则是永恒不变的,为你提供坚实的基础,无论数字环境如何变化。

课程结构

本专项课程精心构建为三个循序渐进的课程,每一门都建立在前一门的基础上,确保全面且连贯的学习体验。

第一门课程:数据分析基础

第一门课程为你数据分析之旅奠定基石,其结构包含三个关键模块。

上一节我们介绍了课程的整体框架,本节中我们来看看第一门课程的具体内容。

模块一:数据世界入门
此模块为你打开数据世界的大门,提供对数据分析、数据科学和数据工程的见解。它涵盖了整个数据分析流程,介绍了本课程至关重要的编程语言和工具,并通过案例研究让你将理论概念带入真实世界的情境中。

模块二:数据整理与SQL
此模块深入探讨数据整理,重点在于SQL。你将探索数据存储和访问方式,通过关系型数据库的视角学习SQL基础,并掌握数据操作技术。对于希望理解SQL以及如何为分析准备数据的人来说,此模块至关重要。

模块三:使用Python进行探索性数据分析
此模块将重点转向使用Python进行探索性数据分析,你将学习如何检查、查询和汇总数据,并通过可视化信息来挖掘洞察。此模块旨在为你提供实践技能,包括使用如pandas这样的数据分析库,以及如MatplotlibSeaborn这样的可视化工具。

第二门课程:预测分析

第二门课程将你的技能进一步带入预测领域,分为三个内容丰富的模块。

在掌握了数据分析基础后,本节中我们来看看如何利用数据进行预测。

模块一:预测分析入门
此模块向你介绍预测分析,涵盖线性回归和逻辑回归等基本模型。这是你开始学习如何从历史数据中预测未来趋势的地方。

模块二:决策树与随机森林
此模块将你的知识扩展到决策树和随机森林,更深入地探讨更复杂的监督学习模型,以增强你的预测分析能力。

模块三:无监督学习与聚类
此模块探索无监督学习和聚类,引导你了解模型比较的细微差别,以及在没有预定义标签的情况下识别模式的艺术。

第三门课程:数据可视化与叙事

第三门课程是你的数据旅程的顶点,通过三个重点模块将分析转化为行动。

在学习了如何分析和预测数据之后,本节中我们来看看如何有效地呈现和传达你的发现。

模块一:使用Tableau进行数据可视化
此模块让你沉浸在使用Tableau进行数据可视化的学习中,你将掌握创建有影响力的可视化数据故事背后的概念和原则,重点是一维和时间序列可视化。

模块二:多维可视化与复杂关系
此模块介绍多维可视化和复杂关系,扩展你分析和可视化多表数据的能力,从而增强你数据解读的深度和清晰度。

模块三:洞察呈现与数据叙事
此模块专注于洞察呈现和数据叙事,在这里你将学习如何将你的分析综合成连贯且有说服力的叙述。这是向利益相关者有效传达数据洞察的关键技能。

每一门课程都相互关联,建立在上一门的基础上,以形成对数据分析的全面理解。

课程要求与证书

按顺序完成所有三门课程对于获得专项课程证书至关重要,该证书向潜在雇主证明了你的投入和专业知识。本专项课程需要投入,包含评分作业、定期测验和沿途的实践练习,让你能够批判性和创造性地将所学应用于真实场景。

这不仅仅是一个专项课程,更是对你未来的投资,为你配备了随着技术进步而保持其价值的常青技能。

总结

本节课中我们一起学习了《如何运用数据》专项课程的概览。总而言之,《如何运用数据》是成为下一代数据专业人士的门户。通过理解数据分析,你不仅是在跟上数字时代的步伐,更是在帮助塑造它。

加入我们这个激动人心的旅程,解锁数据的全部潜力,并转变你的职业生涯。欢迎来到数据分析的世界,让我们一起开始这段变革之旅。

第二三部分 2:Python预测分析课程导论 🎯

在本节课中,我们将要学习宾夕法尼亚大学《如何运用数据》系列课程中关于Python预测分析的导论部分。我们将了解预测分析的核心目标、本课程将涵盖的主要技术,以及如何将这些技术应用于解决实际问题。

课程概述 📋

欢迎来到我们的预测分析课程。本课程专为提升您使用Python构建、优化和实施预测模型的技能而设计。它作为预测分析的全面导论,将从线性回归和逻辑回归的基础知识开始。

预测分析的核心模型 📈

上一节我们介绍了课程的整体目标,本节中我们来看看预测分析的基石模型。这些模型是预测分析的基石,使您能够通过从历史数据中学习来预测未来事件。

我们将涵盖这些模型背后的一些理论,但重点是它们在现实世界场景中的应用,以及评估其性能以确保准确性和可靠性的过程。

进阶机器学习技术 🌲

随着课程的深入,我们将更深入地探讨机器学习领域,重点关注决策树和随机森林。这些技术代表了监督学习中更高级的方面,为分类和回归任务提供了强大的工具。

以下是您将通过实践掌握的关键技能:

  • 学习如何构建这些模型。
  • 理解它们的内在复杂性。
  • 将它们应用于复杂数据集以识别模式并进行预测。

无监督学习与聚类 🔍

除了监督学习,我们还将介绍无监督学习和聚类的概念。这将拓宽您的分析工具包,并为您提供处理没有预定义标签或类别的数据的技能。

课程目标与总结 🏁

在本课程结束时,您不仅将对各种预测分析技术有透彻的理解,还能够应用这些技术解决现实世界的问题,为在数据分析领域的持续成长和探索奠定基础。

本节课中我们一起学习了预测分析课程的整体框架,从基础的回归模型到进阶的决策树、随机森林,再到无监督学习。我们明确了课程的目标是让您掌握使用Python构建和评估预测模型,以解决实际问题的能力。

第二三部分 3:讲师简介 🧑‍🏫

在本节课中,我们将了解本课程的讲师背景,并明确本课程的目标受众与学习目标。

大家好,我是 Brandon Kraowski,是这门“如何运用数据”课程的讲师。

关于我的背景,我最初是一名音乐家,之后在电台广播和音频制作领域工作。我的编程经验始于 Adobe Flash,我曾使用这个工具为大型制药公司开发了一个实时网络会议平台。

大约在2009年,我获得了宾夕法尼亚大学的计算机与信息技术硕士学位,随后在宾大设计学院担任程序员。

之后,我在沃顿商学院计算部门担任应用开发人员,与教职员工合作开发技术以推进学生项目。在此期间,我创办了自己的公司 Bleak LLC,为多家公司提供编程和自由职业应用开发服务。

我后来转型进入数据与分析领域,并成为“商业人工智能与分析”部门的研究与教育总监。2018年,我成为了宾夕法尼亚大学工程学院的讲师。

更多关于我的信息:我是一名贝斯手,已经演奏贝斯多年。我演奏多种风格的音乐,但更偏爱偏向放克风格的音乐。我最近大幅减少了咖啡摄入,并学会了花更多时间冥想。最重要的是,我是一个重视家庭的人。

课程目标受众

本课程面向对数据、数据分析或数据工作仅有极少或完全没有知识和经验的学生和专业人士。

虽然本课程要求具备编程经验,但不要求任何数据分析、数据科学或数据可视化的背景知识。

课程学习目标

总的来说,本课程是一个极佳的入门课程,适合那些希望学习以下内容的学习者:

以下是本课程将涵盖的核心技能领域:

  • 数据机制:理解数据的基本原理和处理方式。
  • 执行数据分析:通过分析数据来获取洞察。
  • 应用数据科学技术:运用技术进行预测。
  • 应用数据分析:利用数据分析来回答问题并解决有趣的商业问题。

本节课中,我们一起了解了讲师的多元背景——从音乐到编程再到数据分析,这展示了数据技能应用的广泛可能性。同时,我们也明确了本课程是为编程初学者但数据领域新手所设计,旨在引导大家掌握从数据基础到解决实际商业问题的完整技能链。

第二三部分 4:预测分析概述

在本节课程中,我们将学习预测分析的基本概念、核心价值以及它在现实世界中的典型应用案例。

什么是预测分析?

预测分析是连接大数据与有效商业决策的桥梁。更正式地说,预测分析指的是利用历史数据、统计算法和机器学习技术来预测未来事件。

此类预测对于企业至关重要,可用于构建更好的产品、预测客户行为、优化运营成本以及降低风险。

预测分析的应用案例

预测分析可用于进行预测并解决商业问题。以下是一些有趣的应用案例。

  • 产品推荐:通过分析客户的浏览和购买历史,亚马逊的预测分析模型为每位用户生成个性化推荐,从而提高客户参与度并增加销售额。
  • 动态定价与资源调配:通过分析历史乘客需求、交通模式和司机可用性,优步的算法预测高需求时段和地点,从而相应调整价格,在高峰时段平衡供需以最大化收入。
  • 维护预测:福特汽车公司利用预测分析来预测车辆维护需求并优化其维护流程。这使得能够主动安排维护计划,减少客户的意外停机时间,并提高车辆的整体性能。

当然,除此之外还有许多其他应用案例。

本模块学习内容

上一节我们了解了预测分析的定义和价值,本节中我们来看看本课程模块的具体学习目标。

欢迎来到本课程的第一个预测分析模块。本模块旨在介绍预测分析。预测分析是一种利用历史数据、统计算法和机器学习技术来预测未来结果的工具。

在本模块中,我们将学习监督学习,并重点介绍三种最常见的监督学习模型:线性回归逻辑回归决策树

我们将使用Python详细探讨每一种模型,为您提供有效构建和解释这些模型所需的知识与技能。

掌握了这些知识,您将能够在现实场景中开始利用预测分析的潜力,从而实现数据驱动的决策。

总结

本节课中我们一起学习了预测分析的核心定义,它利用历史数据算法来预测未来。我们还探讨了它在电商推荐、共享出行定价和工业维护等领域的实际应用。最后,我们明确了本模块将重点学习三种监督学习模型:线性回归、逻辑回归和决策树,并使用Python进行实践。

第二三部分 5:监督式预测模型

在本节课中,我们将学习监督式预测模型的核心概念、它与无监督学习的区别,以及几种常见的监督学习模型。

机器学习流程概述

一个典型的机器学习流程是,将数据集 Z 输入到机器学习算法中,以获得一个模型 F

模型 F 代表了某些输入特征(例如历史价格)与目标输出(例如未来产品销量)之间的关系。当给定一个新的输入时,模型 F 可以利用从数据集 Z 中学到的知识,生成相应的预测。

监督学习与无监督学习

上一节我们介绍了机器学习的基本流程,本节中我们来看看监督学习与无监督学习的主要区别。

以下是两者的核心区别:

  • 监督学习:输入数据是带有标签的。模型的输出是预测新输入数据的标签。例如,从一个标记为“垃圾邮件”或“非垃圾邮件”的电子邮件数据集中学习如何分类垃圾邮件。😡
  • 无监督学习:输入数据是没有标签的。模型的输出是预测数据中结构的表示。例如,将具有相似特征的大量图像分组,而无需手动标记图像内容。

直观地说,监督学习模型试图模仿一组已知的标签示例来进行预测。监督学习和无监督学习技术在预测分析中都有宝贵的应用。

常见的监督学习模型

了解了监督学习的基本定义后,我们来看看几种非常常见的监督学习模型。

以下是三种广泛应用的监督学习模型:

  1. 线性回归:基于一个或多个自变量来预测一个连续的目标变量。😡
    • 公式y = β₀ + β₁x₁ + β₂x₂ + ... + ε
    • 应用:广泛用于预测销售额、需求和价格。
  2. 逻辑回归:预测一个二元或分类目标变量。
    • 应用:可用于预测客户是否会流失,或者一笔交易是否存在欺诈。
  3. 决策树:可用于分类和回归问题,在处理复杂关系时具有更好的准确性。
    • 应用:可根据客户的特征、行为或偏好,将客户划分为不同的群体。

总结

本节课中我们一起学习了监督式预测模型。我们首先了解了机器学习的基本流程,即从数据到模型的映射。然后,我们区分了监督学习(使用带标签的数据进行预测)和无监督学习(发现无标签数据的结构)。最后,我们介绍了线性回归、逻辑回归和决策树这三种常见的监督学习模型及其典型应用场景。

第二三部分 6:线性回归 📈

在本节课中,我们将要学习线性回归的基本概念。线性回归是一种用于预测分析的经典机器学习方法,它假设输入变量与输出变量之间存在线性关系。我们将探讨其工作原理、如何寻找最佳模型、如何评估模型性能以及如何避免过拟合问题。


模型假设与目标 🎯

上一节我们介绍了机器学习流程最终会生成一个模型 F。在线性回归中,我们假设这个模型是一个线性模型。换句话说,线性回归假设给定的输入与目标输出之间存在线性关系。

例如,假设我们想根据客户对某产品的订单数量来预测其年龄。在这个例子中,订单数量是输入变量,客户年龄是输出变量。

为了进行线性回归,我们收集了不同客户的数据,包括他们的订单数量和年龄。我们将这些数据绘制在图表上,X轴代表订单数量,Y轴代表年龄。图表上的每个数据点用一个蓝色圆圈表示。

线性回归的目标是找到一条最符合数据点的直线。这条线在图表上用一条红线表示。这条线的位置和斜率是通过一个数学过程确定的,该过程最小化了直线与数据点之间的距离。

一旦我们有了这条线,就可以用它来进行预测。例如,如果我们有一个新客户的订单数量,就可以使用这条线来估计其年龄。这条线代表了我们学到的模型,它允许我们根据输入变量(订单数量)来预测输出变量(年龄)。


模型参数 🔧

在线性回归中,模型参数指的是决定线性模型具体特征的值。这些参数定义了代表输入变量和输出变量之间关系的直线的斜率和截距。

让我们回到根据订单数量预测客户年龄的例子。在这种情况下,线性回归模型的参数如下:

  • 斜率 代表输入变量(订单数量)每变化一个单位时,输出变量(年龄)的变化量。
  • 截距 是直线与Y轴相交的点。

我们如何找到最优的模型参数呢?如果训练数据集有明显的趋势,我们可以很快地画出一条看起来最优的直线。但对于嘈杂的现实数据集,找到最优模型就不那么直接了。在线性回归的训练过程中,算法通过最小化模型的预测值与训练数据中的实际值之间的差异,来学习这些参数的最优值。


损失函数与评估 📉

我们需要一个指标来衡量模型在机器学习问题中的表现。通常,会定义一个损失函数来评估模型。直观地说,如果预测输出接近期望输出,损失函数的值就小;反之则大。

一个常用的损失函数是均方误差(Mean Squared Error, MSE)损失函数。该损失表示训练数据集中所有样本的预测输出与期望输出之间的平均平方差。

最优的线性回归模型会最小化MSE损失。在实践中,我们可以使用Scikit-learn机器学习库中的 mean_squared_error 函数来计算MSE。

from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_true, y_pred)

模型复杂度与过拟合 ⚠️

简单的线性回归涉及一个自变量和一个因变量,而多元线性回归则扩展到包含多个自变量。

过拟合发生在学习模型与训练数据集拟合得非常好,但无法推广到新样本的情况。右边的模型在训练数据上没有损失,但实际上并没有捕捉到数据的真实模式。

过拟合是使用复杂模型时可能出现的一个常见问题。当一个模型变得过于复杂时,它可能开始捕捉训练数据中的噪声或随机波动,导致对新出现的、未见过的数据泛化能力差。

为了检测过拟合,通常会使用训练-测试集划分协议,即我们使用预留的测试数据来估计模型在新数据上的损失。

以下是该过程的步骤:

第一步,随机打乱数据集,并将数据集分为训练集和测试集。

第二步,在训练集上训练模型。

第三步,在训练集和测试集上评估学习到的模型,以获得训练损失和测试损失(也称为泛化损失)。也可以使用其他指标。

一个好的模型应该同时具有较低的训练损失(表明其对训练数据拟合良好)和较低的测试损失(表明其对未见数据泛化良好)。


总结 ✨

本节课中,我们一起学习了线性回归的核心知识。我们了解到线性回归基于输入与输出间的线性关系假设,通过最小化预测值与真实值之间的均方误差来寻找最优的模型参数(斜率和截距)。同时,我们认识到模型复杂度可能导致过拟合,即模型在训练集上表现完美却在未知数据上失效。为了避免此问题,我们引入了训练-测试集划分的方法来评估模型的泛化能力。一个稳健的模型应在训练集和测试集上均表现出较低的损失。

第二三部分 7:数据加载与探索

在本节课中,我们将学习如何使用Python的Scikit-learn库加载加州房价数据集,并进行初步的数据探索,为后续构建线性回归模型做好准备。

数据加载

首先,我们需要加载数据。我们将直接从Scikit-learn库中获取加州房价数据集,而不是使用外部数据源。使用 fetch_california_housing 方法,并设置参数 as_frame=True,将数据加载为Pandas DataFrame格式。

from sklearn.datasets import fetch_california_housing

california_housing = fetch_california_housing(as_frame=True)

数据加载完成后,我们将其存储在变量 california_housing 中。

数据集概览

接下来,我们查看数据集的描述信息,以了解其背景和结构。通过访问数据集的 DESCR 属性可以获取这些信息。

该数据集包含了加州各街区的房价汇总数据。总共有超过20000个样本,每个样本有8个数值型特征(作为预测变量)和1个数值型目标变量。目标变量代表了加州特定街区的房价中位数。

为了更具体地了解每个特征和目标变量的取值,我们查看DataFrame的前几行数据。我们从已获取的数据集中加载DataFrame。

housing_df = california_housing.frame
print(housing_df.head())

输出将显示DataFrame的前五行。我们可以看到八个特征列,以及我们想要预测的目标列 MedHouseVal。所有属性都是数值型的。

问题定义

在初步查看数据后,我们来定义要解决的业务问题。基于给定的特征,我们希望构建一个监督式机器学习模型,使用回归方法来预测给定街区的房价中位数。

我们选择线性回归模型,原因如下:

  • 监督式模型:因为我们拥有带标签的数据,即我们知道每个样本对应的房价中位数,可用于训练模型。
  • 回归任务:因为我们的目标变量是连续数值,而非分类值。

深入数据探索

在训练模型之前,进一步探索数据总是有益的。这有助于处理异常值,并验证应用线性回归模型对此场景是否合理。

首先,我们使用 info 方法查看数据的基本信息。

print(housing_df.info())

此方法显示每个特征的数据类型,以及每个特征中非空值的数量。空值对应数据集中的潜在缺失值。观察发现,这个数据集很“干净”:所有特征都是数值型(编码为浮点数),且没有缺失值。

接着,我们查看数据集中数值特征的统计摘要。这可以通过对DataFrame应用 describe 方法来实现。

print(housing_df.describe())

这将显示每个特征的多个统计量,包括数量、均值、标准差、最小值、最大值和各分位数。通过这些统计量,我们可以轻松了解每个特征的分布情况,以及不同特征在尺度上的关系。

另一种有效的探索方式是绘制每个数值特征的直方图,以比较特征间的分布。直方图的纵轴代表实例数量,横轴代表数值范围。DataFrame有内置的直方图绘制方法。

housing_df.hist(bins=50, figsize=(12, 8))

以下是绘制出的直方图。我们为每个特征以及目标变量都生成了直方图。

从这些图中,我们可以观察到几点:

  1. 特征尺度不一:有些特征的值范围很大(例如0到15000),而有些特征的值范围较小(例如0到3000)。这可能导致模型在学习过程中过度偏重某些特征。为了防止这种情况,特征缩放是一种非常有用的预处理方法。
  2. 部分特征呈重尾分布:这意味着数值在均值右侧的延伸比左侧更多。这可能使模型更难检测数据中的模式。
  3. 数值截断:在“房价中位数”和“房龄中位数”中,可以注意到数值存在上限(例如,超过5的值都被记录为5)。根据你处理的具体问题,你可能希望或不希望模型学习到这种截断行为。

总结

本节课中,我们一起学习了如何加载加州房价数据集,并对其进行了初步探索。我们查看了数据的基本信息、统计摘要和分布直方图。这些探索为我们提供了重要洞察,例如特征尺度差异和分布形态,这将指导我们在后续步骤中决定使用哪些特征以及需要应用哪些数据预处理方法(如特征缩放),为成功构建线性回归模型奠定基础。

第二三部分 8:编程演示:创建相关性矩阵 📊

在本节课中,我们将学习如何通过创建相关性矩阵来探索数据特征与预测目标之间的关系。我们将使用Python的Pandas库来计算相关性,并通过可视化来验证我们的发现。

概述

在上一节中,我们介绍了数据集中的多个特征。然而,并非所有特征都对预测目标有意义。为了快速理解特征与目标变量之间的关系,我们将计算并分析一个相关性矩阵。

创建相关性矩阵

相关性矩阵可以帮助我们量化不同变量之间的线性关系。其计算出的相关系数值范围在-1到1之间。值越接近1或-1,表示相关性越强;值接近0则表示没有明显的线性相关性。

以下是创建相关性矩阵的步骤:

首先,我们使用数据框的.corr()方法来计算相关性矩阵。

correlation_matrix = df.corr()

这行代码会生成一个新的数据框,其中包含了数据集中每个属性之间的相关系数。

分析相关性

生成的相关性矩阵包含大量信息。为了聚焦于我们需要的内容,我们可以从中选择与目标变量“房屋价值中位数”相关的列。

以下是具体操作:

# 第二三部分 选择与目标变量‘median_house_value’相关的列
target_correlation = correlation_matrix[‘median_house_value’]

接下来,我们按降序排列这些值,以便快速识别出与目标最相关的特征。

sorted_correlation = target_correlation.sort_values(ascending=False)

排序后,排在第一的是目标变量自身,我们可以暂时忽略它。紧随其后的“收入中位数”与我们的目标值具有最高的正相关性。

可视化验证

为了直观地确认这种相关性,我们可以绘制一个散点图。散点图能展示两个连续变量之间的关系模式。

以下是绘制散点图的代码:

import matplotlib.pyplot as plt

plt.scatter(df[‘median_income’], df[‘median_house_value’])
plt.xlabel(‘Median Income’)
plt.ylabel(‘Median House Value’)
plt.show()

运行代码后,散点图清晰地显示了“收入中位数”与“房屋价值中位数”之间存在线性相关关系。同时,我们注意到在数值5(代表50万美元)处存在一个价格上限,这表明原始数据为了简化进行了封顶处理。

数据预处理

基于以上洞察,在本例的模型中,我们将只使用“收入中位数”这一个特征作为预测器。这个散点图也初步证实了选择线性回归模型对于此场景是合适的。

在构建模型前,我们需要进行一个简单的数据预处理步骤:移除那些房屋价值超过50万美元的样本,以防止价格上限影响线性模型的拟合。

以下是预处理代码:

# 第二三部分 选择房屋价值低于50万美元的数据
df_filtered = df[df[‘median_house_value’] < 5]

# 第二三部分 选择预测器(特征)和目标变量
X = df_filtered[[‘median_income’]]  # 使用双括号以确保结果为DataFrame
y = df_filtered[‘median_house_value’]

总结

本节课中,我们一起学习了如何通过创建和分析相关性矩阵来探索数据。我们了解到“收入中位数”是与预测目标最相关的特征,并通过散点图可视化了这种线性关系。最后,我们基于数据探索的洞察,进行了简单的数据预处理,为后续构建单变量线性回归模型做好了准备。数据探索是一个迭代过程,它为我们构建和优化机器学习模型提供了至关重要的依据。

第二三部分 9:训练测试集划分

在本节课中,我们将学习机器学习中的一个核心概念:训练测试集划分。我们将了解其目的,并使用Python的Scikit-learn库来实践这一过程。

概述

在上一节中,我们完成了数据预处理。本节中,我们将介绍如何将数据集划分为训练集和测试集。这是评估模型泛化能力、防止过拟合的关键步骤。

训练测试集划分的原理

在开始训练模型之前,需要回顾训练测试集划分的流程。该流程的核心是使用一部分预留数据来估计模型在未见过的数据上的损失,从而检测模型是否过拟合。

过拟合是指模型在训练数据上表现很好,但在新数据上表现不佳的现象。划分数据集可以帮助我们评估这一点。

使用Scikit-learn进行划分

Scikit-learn库中的model_selection模块为我们提供了便捷的划分方法。

以下是实现步骤:

首先,从sklearn.model_selection中导入train_test_split函数。

from sklearn.model_selection import train_test_split

接着,使用这个函数来划分我们的特征数据X和目标数据y。我们将测试集的大小设置为原始数据集的20%(test_size=0.2)。同时,设置一个随机种子random_state=42

设置随机种子的作用是强制函数在每次运行代码时生成相同的训练-测试划分,从而确保结果可以复现。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

检查划分结果

划分完成后,我们可以打印出训练集和测试集的样本数量以进行验证。

print("训练样本数:", len(X_train))
print("测试样本数:", len(X_test))

执行代码后,我们将看到超过15000个训练样本和大约4000个测试样本。这符合我们设定的20%测试集比例。

总结

本节课中,我们一起学习了训练测试集划分的重要性及操作方法。我们了解到,通过sklearn.model_selection.train_test_split函数,可以轻松地将数据划分为用于模型训练的训练集和用于评估模型性能的测试集,并通过设置随机种子保证结果的可复现性。这是构建可靠机器学习模型的基础步骤。

第二三部分 10:编程演示:构建线性回归模型 📊

在本节课中,我们将学习如何使用Python的Scikit-learn库来构建一个线性回归模型。我们将从导入必要的模块开始,初始化模型,然后使用训练数据来拟合模型。


上一节我们完成了数据的探索、预处理以及训练集与测试集的划分。本节中,我们来看看如何具体构建线性回归模型。

首先,我们需要从Scikit-learn库中导入线性回归模块。

from sklearn.linear_model import LinearRegression

导入完成后,我们可以初始化一个线性回归模型。

model = LinearRegression()

在初始化时,我们可以提供不同的参数来调整模型的设置。一个特别有用的参数是 fit_intercept。这个参数指定模型是否计算截距。

如果你还记得,截距是线性回归直线与Y轴相交的点。其公式为:
y = β₀ + β₁x₁ + ... + βₙxₙ
其中 β₀ 就是截距。

fit_intercept 参数的默认值是 True,这意味着模型将包含一个截距项,并会在训练过程中尝试计算它。对于当前问题,我们将保持这个默认设置不变。

模型初始化后,我们就可以使用训练数据来拟合它。这通过调用模型的 fit 方法并传入训练特征 X_train 和训练目标 y_train 来完成。

model.fit(X_train, y_train)

运行这行代码后,我们就得到了一个在训练集上训练完成的线性回归模型。


现在,我们已经成功地在训练数据上拟合了模型。接下来,我们就可以使用这个训练好的模型,分别在训练集和测试集上进行评估,以了解其性能。


本节课中我们一起学习了构建线性回归模型的关键步骤:导入模块、初始化模型、理解截距参数,以及使用训练数据拟合模型。这为后续评估模型性能奠定了基础。

第二三部分 11:线性回归模型评估

在本节中,我们将学习如何评估一个线性回归模型的性能。我们将介绍两种常用的评估指标,并通过代码演示如何计算它们在训练集和测试集上的表现。

概述

我们已经建立了一个线性回归模型。现在,是时候评估这个模型的表现了。评估模型有多种方法,本节我们将重点介绍两种:均方误差和平均绝对误差。我们将通过计算平均绝对误差来直观地理解模型的预测误差大小。

模型评估指标

评估线性回归模型时,有多种函数可供选择。以下是两种核心的评估指标:

  1. 均方误差:该指标计算预测输出与期望输出之间差值的平方的平均值。
    • 公式MSE = (1/n) * Σ(y_i - ŷ_i)^2
  2. 平均绝对误差:该指标计算预测值与实际值之间绝对差值的平均值。
    • 公式MAE = (1/n) * Σ|y_i - ŷ_i|

在本例中,我们选择使用平均绝对误差,因为它可以直接解释为模型在此特定问题中产生的误差(以十万为单位)。当然,根据具体情况,也可以使用其他评估指标。

在训练集上评估模型

现在,让我们在训练集上尝试计算平均绝对误差。

以下是具体步骤:

  • 首先,从 sklearn.metrics 库中导入 mean_absolute_error 函数。
  • 然后,使用我们拟合好的线性回归模型的 predict 函数,传入训练特征 X_train,来获取训练集的预测值 y_pred_train
  • 最后,使用 mean_absolute_error 函数,传入真实值 y_train 和上一步得到的预测值进行评估。
# 第二三部分 导入评估指标
from sklearn.metrics import mean_absolute_error

# 第二三部分 获取训练集预测值
y_pred_train = linear_regression_model.predict(X_train)

# 第二三部分 计算训练集上的平均绝对误差
mae_train = mean_absolute_error(y_train, y_pred_train)
print(f"训练集 MAE: {mae_train:.2f}")

运行以上代码,我们得到训练集上的平均绝对误差约为 0.56。

在测试集上评估模型

上一节我们在训练集上评估了模型,本节我们来看看模型在未见过的测试集上的表现。重复相似的过程,但在测试集上进行。

以下是具体步骤:

  • 这次,我们对 X_test 进行预测,而不是 X_train,从而得到测试数据的预测值 y_pred_test
  • 然后,同样使用 mean_absolute_error 函数,传入真实值 y_test 和我们的预测值 y_pred_test
# 第二三部分 获取测试集预测值
y_pred_test = linear_regression_model.predict(X_test)

# 第二三部分 计算测试集上的平均绝对误差
mae_test = mean_absolute_error(y_test, y_pred_test)
print(f"测试集 MAE: {mae_test:.2f}")

运行这段代码,我们可以看到测试集上的平均绝对误差约为 0.57。

结果分析与后续步骤

从评估结果可以看出,模型在训练集和测试集上的误差非常接近,这表明模型没有过拟合。然而,两者的性能都不算理想。具体来说,如果直接解释 MAE,我们的模型平均误差超过了 0.5(即超过 5 万)。在这种情况下,我们可以说模型存在欠拟合

欠拟合可能由两个原因导致:

  1. 我们选择的特征没有提供足够的信息来做出准确的预测。
  2. 模型本身不够强大,无法捕捉数据中的复杂模式。

在未来的课程中,我们将使用更强大的模型(如决策树)来重新处理这个数据集,该模型能够拟合复杂数据集中的线性和非线性关系。同时,也鼓励你尝试在当前线性回归模型中添加更多特征,观察模型性能如何变化。

总结

本节课中,我们一起学习了如何评估线性回归模型。我们介绍了均方误差和平均绝对误差两个核心指标,并重点使用平均绝对误差评估了模型在训练集和测试集上的表现。我们发现模型存在欠拟合问题,并讨论了可能的原因及后续改进方向。

第二三部分 12:线性回归模型解读

在本节课中,我们将学习如何解读线性回归模型的结果。我们将通过可视化模型拟合效果和分析模型系数,来理解模型参数的实际含义。

模型可视化

上一节我们介绍了如何使用平均绝对误差(MAE)评估模型。本节中,我们来看看如何通过可视化来直观地理解模型的拟合情况。

我们将使用Matplotlib库来绘制图表。以下是绘图步骤:

import matplotlib.pyplot as plt

首先,我们绘制原始数据集的散点图,其中X轴代表预测变量(中位数收入),Y轴代表目标变量(中位数房屋价值)。

接着,我们在同一张图上绘制训练好的模型预测线。这条线由训练数据中的X值(x_train)和模型预测的Y值(y_pred)构成。

运行代码后,我们将看到一张图表。图表上,蓝色的线代表模型的预测结果,黑色的点代表原始数据。

对于单变量线性回归,这种可视化方法能让我们轻松地验证模型是否合理。从图中可以看到,模型呈现正相关趋势,这与原始数据集的整体趋势是一致的。

然而,对于多元线性回归模型,仅靠可视化来理解就变得不那么直观了。

模型系数分析

除了绘图,我们还可以通过分析模型系数来更好地理解结果。无论是在简单线性回归还是多元线性回归中,每个自变量的系数大小都代表了该变量对目标变量的影响程度,而系数的正负则代表了影响的方向。

以下是获取并解读模型系数的步骤:

首先,我们从训练好的模型中获取系数(coef_)和截距(intercept_)属性。

coefficient = model.coef_
intercept = model.intercept_

打印这些值后,你会注意到我们得到了一个约为0.4的正系数。在这个案例中,这个系数代表中位数收入每增加一个单位(即1美元),中位数房屋价值预计会增加约0.4个单位

具体来说,如果中位数收入增加100,000美元,中位数房屋价值预计会增加约 0.4 * 100,000 = 40,000美元。

截距约为0.45(单位同样是十万美元)。这代表了当中位数收入为0时,模型中位数房屋价值的估计值,可以理解为房屋价值的基准值,大约为45,000美元。

总结

本节课中,我们一起学习了如何解读线性回归模型。我们通过将模型预测线绘制在原始数据散点图上,直观地评估了模型的拟合效果。更重要的是,我们分析了模型的系数和截距,理解了它们所代表的实际经济含义:系数表示预测变量对目标变量的影响强度和方向,而截距则代表了所有预测变量为零时目标变量的基准估计值。这些分析步骤是理解和使用线性回归模型的关键。

第二三部分 13:Codio平台Jupyter Notebook作业指南 🚀

在本教程中,我们将学习如何在Codio平台上使用Jupyter Notebook完成课程作业。Codio是一个优秀的在线平台,它为您提供了预配置的环境,让您可以在Mac、Windows或Linux系统上无缝运行代码。

概述

本节将详细介绍从打开作业到最终提交的完整流程,包括如何运行代码、解决问题以及进行最终验证。我们将确保每一步都清晰明了,帮助初学者顺利完成数据分析任务。

启动与设置

上一节我们介绍了Codio平台的基本概念,本节中我们来看看如何启动一个具体的作业。

首先,您会看到一个包含Jupyter Notebook说明的作业页面。您可以按照页面上的指示进行操作。

以下是启动作业的具体步骤:

  1. 向下滚动页面,并按照提供的PDF文件中的详细作业说明操作。
  2. 滚动到底部,勾选确认框。
  3. 如果是首次使用,请输入您的法定全名,然后点击“启动应用”按钮。
  4. 环境设置通常需要20秒到1分钟。如果页面没有反应,请尝试刷新。

启动后,您将看到一个包含额外说明的引导页面。请从该页面打开Jupyter Notebook文件。

执行代码与回答问题

Codio环境已为您预先配置好。现在,我们来学习如何执行代码单元。

要运行第一个代码单元,请按 Shift + Enter(在Mac上是 Shift + Return)。此操作会导入整个练习所需的所有库。

除了解决方案代码,问题会按步骤列出。请仔细遵循这些问题。

在标记有“在此处编写你的代码”的地方,编写代码来回答问题。

请按顺序执行每个代码单元。测试单元会将您的变量与环境存储的解决方案变量进行比较。

Shift + Enter 来验证您的变量。您将在单元格下方看到每个测试的结果。

故障排除:常见错误

在编写代码时,难免会遇到错误。接下来,我们看看如何解决一些常见问题。

文件路径错误

加载数据文件时,一个常见错误是文件路径不正确。

请检查代码中的文件路径。如果路径错误,您将收到“文件未找到”的错误。

例如,这里有一个错误提示:“文件不存在”。您可以看到引发错误的代码行引用。

要修复此错误,请修正代码中的文件路径。错误就出现在这一行代码中。

您可以利用官方文档等资源来理解函数参数。例如,对于 read_csv 函数,您可以在这里查看更多信息。

您也可以在这里查看关于文件路径参数的更具体信息。

让我们在这里修正文件路径。如果我们重新运行该单元格中的代码,就不会再收到“文件未找到”的错误了。

逻辑错误

如果您的代码能够运行,但返回了错误的结果,请将您的逻辑与项目要求进行比较。

检查变量和计算过程以确保准确性。例如,假设我们因为获取了错误数据框的长度,而将错误信息存储在了变量中。

我们获取的不是 restaurant_location_df 的长度,而是 restaurant_except_df 的长度。

现在,如果我重新运行这个单元格中的代码,本身不会得到任何错误。但是,如果我重新运行该单元格的测试,您会看到出现了一个断言错误。这里引用了具体失败的测试。

断言语句正在将我的 num_rows_restaurant_location 与解决方案中的 num_rows_restaurant_location 进行比较。两者不相等。这就是该测试的实际代码,用于比较我的变量和解决方案变量。

让我们向上滚动并修正代码,获取正确数据框(即 restaurant_location_df)的长度,然后重新运行测试。您可以看到现在所有测试都通过了。

最终验证与提交

在提交之前,重置内核并顺序运行所有单元格是一个好习惯。

使用“内核”菜单中的“重启并运行所有”功能。

验证您的笔记本。如果所有测试都通过,请将您的作业标记为完成。

总结

本节课中,我们一起学习了在Codio平台上使用Jupyter Notebook完成作业的完整流程。我们涵盖了从启动环境、执行代码、回答分步问题,到诊断和修复文件路径错误、逻辑错误,以及最终验证和提交作业的所有关键步骤。遵循这些步骤,您将能顺利在Codio和Jupyter Notebook中完成作业。如果遇到挑战,请参考本指南或查阅课程材料。祝您编码愉快,好运!

机器学习基础:第14章:逻辑回归

在本节课中,我们将学习逻辑回归,这是一种用于解决分类问题的强大算法。我们将了解它与线性回归的区别,并深入探讨其核心工作原理。


在上一节中,我们介绍了回归任务。本节中,我们来看看分类任务,并聚焦于逻辑回归这一核心分类算法。

回归 的任务是预测一个连续的数值作为输出变量。目标是建模输入变量和输出变量之间的关系。预测值是实数,可以在一定范围内取任意值。例如,预测客户的年龄或房屋的价格都属于回归问题。

分类 则涉及将输入变量分配到预定义的类别或类中。输出变量是离散的,代表一个类别标签。目标是学习一个基于输入特征来区分不同类别的决策边界。例如,将电子邮件分类为垃圾邮件或非垃圾邮件,或预测肿瘤是良性还是恶性,都属于分类问题。

线性回归和逻辑回归都学习一条直线。在线性回归中,这条直线用于预测一定范围内的真实目标值。在逻辑回归中,它定义了一个用于分隔不同类别或类的边界。


那么,逻辑回归中的决策边界是如何确定的呢?简单来说,逻辑回归使用一个逻辑函数,也称为Sigmoid函数,将输出映射到0到1之间的值,代表属于某个特定类别的概率。

以下是其工作原理:

Sigmoid函数接收一个输入值,并将其转换为平滑的S形曲线。当输入为负值时,曲线从0开始;随着输入变为正值,曲线趋近于1。在中点,即输入值为0时,Sigmoid函数的取值为0.5。

基于逻辑函数,逻辑回归模型计算给定输出属于特定类别的概率。因此,如果类别1的概率大于0.5,我们就可以足够自信地预测输出类别为类别1。否则,预测为类别0。

类别之间的决策边界,实际上就是S形曲线中点的连线,该点处的函数值为0.5。


在实践中,为了评估逻辑回归的模型性能,我们计算模型的预测准确率分数。准确率分数表示模型产生的预测中有百分之多少是正确的。

其计算公式为:准确率 = 正确预测的数量 / 总预测数量。更高的准确率数值表明模型的预测更准确。

简而言之,我们可以使用Scikit-learn机器学习库中的准确率评分函数。


本节课中,我们一起学习了逻辑回归。我们明确了回归与分类的区别,理解了逻辑回归如何利用Sigmoid函数将线性输出转换为概率,并基于此概率设定决策边界来进行分类预测。最后,我们介绍了使用准确率作为评估分类模型性能的基本指标。

第二三部分 14:创建分类属性 🏷️

在本节课程中,我们将学习如何将一个回归问题转化为分类问题。具体来说,我们将使用加州房价数据集,把预测具体房价(数值型目标)的任务,转变为预测房屋属于“高价值”还是“低价值”组别(分类型目标)的任务。

上一节我们介绍了线性回归模型的应用,本节中我们来看看如何为逻辑回归等分类模型准备数据。

数据准备与问题重构

首先,我们加载之前使用过的加州房价数据集,并延续之前的设置。该数据集包含了加州各区域的房屋信息汇总,共有8个数值型特征和一个数值型目标变量,名为 median_house_value

假设经过业务讨论,团队不再需要预测具体的房屋中位数价值,而是希望预测房屋样本属于两个价值组别中的哪一个。经过这样的调整,该问题就可以被定义为一个有监督的二元分类问题

创建分类标签

我们需要在数据集中创建一个名为 value_group 的新列,它将代表新的类别标签。value_group 将是一个分类属性。

以下是创建步骤:

  1. 我们将“低价值”组编码为 0,“高价值”组编码为 1
  2. 创建新列时,首先将所有值初始化为 0,代表“低价值”类。
  3. 然后,使用布尔条件找出满足第二类(即“高价值”类)条件的样本,并将其类别标签设置为 1

我们将使用 loc 方法来实现。这个方法允许通过指定布尔数组或列标签来访问特定的行和列。

# 第二三部分 假设 df 是我们的DataFrame,且已包含 ‘median_house_value‘ 列
df[‘value_group‘] = 0  # 初始化新列,全部设为0(低价值组)
df.loc[df[‘median_house_value‘] >= 2, ‘value_group‘] = 1  # 将中位数房价大于等于2的样本标记为1(高价值组)

在这段代码中:

  • df[‘median_house_value‘] >= 2 是一个布尔条件,用于选择中位数房价大于等于2(即20万美元)的行。
  • ‘value_group‘ 指定了我们想要操作的列。
  • 对于满足条件的行,其 value_group 列的值将被设置为 1

运行代码后查看前五行数据,可以看到新增了 value_group 列,并且任何 median_house_value 大于2的行,其值都被设置为1。

检查类别分布

不同类别的样本数量不平衡可能会极大地限制模型的性能。在这种情况下,可能需要进行额外的预处理,例如分层采样。

我们可以快速统计每个类别的样本数量来检查平衡性:

class_distribution = df[‘value_group‘].value_counts()
print(class_distribution)

对于本例,两个类别的样本数量都接近10,000个,因此类别标签之间不存在严重的不平衡,我们可以继续而不进行额外的预处理。

总结

本节课中我们一起学习了如何将回归问题的数值型目标变量转化为分类问题的类别标签。关键步骤包括:定义分类阈值、创建新的分类列、使用 loc 方法基于条件赋值,以及检查结果类别的分布以确保数据平衡。这为后续应用逻辑回归等分类模型做好了数据准备。

第二三部分 16:编程演示:整合新数据 🧩

在本节课中,我们将学习如何将一个新的分类属性整合到现有的数据集中。具体来说,我们将处理一个名为“海洋邻近度”的新特征,并演示如何将其从字符串格式转换为机器学习模型可以处理的数值格式。


上一节我们介绍了数据预处理的基本概念,本节中我们来看看如何实际操作,整合一个新的分类变量。

现在我们已经建立了一个新的变量集,业务团队通知我们,他们提供了一个名为“海洋邻近度”的新分类属性,可以作为预测因子使用。这个新属性有五个可能的值,用于描述房屋样本与海洋的接近程度。

我们首先从其CSV文件中加载这个新特征,并将其添加到我们的数据框中。我们将直接使用pandas读取CSV文件。这里我们看到,对于每个样本,都有一个标签来确定其与海洋的接近程度。

我们希望将其添加到原始数据框中,因此创建一个名为ocean_proximity的新列。我们将这个新列设置为从CSV文件读取的数据框的副本。

添加新特征后,我们可以快速检查一下数据框的信息。你会注意到,虽然没有缺失值,但我们新的分类属性ocean_proximity目前是字符串值。作为人类,我们可以很容易地理解这些字符串。然而,机器学习模型处理的是数值数据。因此,我们需要一个额外的步骤来将分类特征转换为数值。

以下是几种常见的编码方法:

  • 整数编码:也称为标签编码或序数编码。这类似于手动构建value_group列时所做的工作。我们也可以借助pandas的factorize方法自动完成。
  • 独热编码:为每个类别创建一个新的二进制列。
  • 频率编码:用该类别的出现频率来替换类别标签。

你可以根据具体的业务问题选择合适的编码方法。

接下来,我们演示如何使用整数编码。首先从数据集中选择ocean_proximity列,将其放入变量ocean_proximity_cat中。然后对这个列应用factorize方法。

ocean_proximity_cat_encoded, categories = ocean_proximity_cat.factorize()

这将返回该特征的编码值,以及用于编码特征的可用类别。我们可以先检查一下编码值的样子,它们应该是整数。这里我们只看到了0和2,但为了更好地理解,我们可以接着检查类别。总共应该有五个类别,这意味着我们将有从0到4的数值标签。

现在,让我们将这个编码后的属性添加回数据框。我们创建一个名为ocean_proximity_category的新列,并使用从factorize获得的编码值来设置它。

df['ocean_proximity_category'] = ocean_proximity_cat_encoded

我们可以再次检查数据框中的前几个样本。现在,我们有了一个分类的value_group,以及一个分类属性ocean_proximity_category,它对应着我们获得的新特征中的字符串值,以供参考。


本节课中我们一起学习了如何将新的分类数据整合到现有数据集中。关键步骤包括:加载新数据、检查数据类型,以及使用整数编码(如factorize方法)将字符串分类变量转换为数值形式,以便机器学习模型能够处理。理解并选择合适的编码方法是特征工程中的重要一环。

第二三部分 17:编程演示:构建逻辑回归模型 🧠

在本节课中,我们将学习如何使用Python的Scikit-learn库构建一个逻辑回归模型。我们将使用两个特征来预测一个分类目标变量,并评估模型的性能。


上一节我们介绍了逻辑回归的基本概念,本节中我们来看看如何用代码实现它。我们将使用“中位数收入”和“海洋邻近度”这两个特征,来预测我们之前构建的“价值分组”目标变量。

首先,我们需要提取所需的数据。以下是具体步骤:

以下是数据准备步骤:

  • 对于预测变量(特征X),我们有两个:
    • 第一个特征是 median_income(中位数收入)。
    • 第二个特征是新构建的分类特征 ocean_proximity_category(海洋邻近度类别)。
  • 对于我们的目标变量(标签Y),我们将使用新构建的分类目标变量 value_group(价值分组)。

正如之前所见,在训练模型之前,我们需要对数据集应用训练集-测试集分割协议。

因此,我们使用Scikit-learn中的 train_test_split 方法。我们再次传入我们的X和Y,并设置相同的测试集大小(即原始数据集的20%),同时指定一个随机种子以确保结果可复现。

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

分割完成后,如果我们检查数据形状,会得到大约16000个训练实例和4000个测试实例。

现在我们可以开始训练模型。我们已经从Scikit-learn导入了逻辑回归模型。

接下来,我们初始化模型。在初始化期间,您可以传入各种参数来更改此模型中的任何设置,这与线性回归模型类似。例如,有一个名为 fit_intercept 的参数,您可以更改它以确定要学习的决策边界是否包含截距项。默认情况下,此参数设置为 True,我们将保持默认设置。

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(fit_intercept=True)

模型初始化后,我们通过传入 X_trainy_train 在训练数据上拟合模型。

model.fit(X_train, y_train)

现在,我们有了一个训练好的逻辑回归模型。由于我们处理的是分类问题,可以选择准确率作为评估模型的指标。准确率的计算公式为:正确预测数 / 总预测数。请注意,与使用损失函数相比,这是一个更易于理解的性能评估指标。

我们将使用Scikit-learn的 accuracy_score 方法进行计算。

首先,我们获取训练集上的预测结果,然后将预测值和真实值传入 accuracy_score 方法。

from sklearn.metrics import accuracy_score

y_train_pred = model.predict(X_train)
train_accuracy = accuracy_score(y_train, y_train_pred)

这样,我们在训练集上得到了大约76%的准确率。

我们对测试集执行相同的操作:为测试样本进行预测,然后评估真实测试标签与预测测试标签之间的准确率。

y_test_pred = model.predict(X_test)
test_accuracy = accuracy_score(y_test, y_test_pred)

然后我们可以检查准确率,同样大约是76%。

与在线性回归演示中看到的情况类似,模型没有过拟合,但表现也不够好,正确率只有大约76%。这再次表明,我们选择的特征没有提供足够的信息来进行正确的预测,或者模型本身不够强大,无法捕捉数据中的模式。


本节课中我们一起学习了如何使用Scikit-learn构建和评估一个逻辑回归分类模型。我们完成了从数据准备、训练测试分割、模型训练到性能评估的完整流程,并了解到当前模型的表现(约76%准确率)提示我们可能需要更好的特征或更复杂的模型。

第二三部分 18:逻辑回归模型解读与基准比较 📊

在本节课中,我们将学习如何评估逻辑回归模型的性能,并通过与一个简单的基准模型进行比较,来判断模型性能是否可接受。

上一节我们介绍了如何训练和评估一个逻辑回归模型。本节中,我们来看看如何为模型性能设定一个合理的判断标准。

模型性能评估

我们的模型预测准确率约为76%。我们需要判断这个性能是否可接受。直观上,我们需要一个标准来与我们的模型进行比较。

对于机器学习问题,我们通常会选择一个基准模型。基准模型通常代表一个性能下限,我们新训练的模型需要超越这个下限。

建立基准模型

以下是建立基准模型的步骤。

我们将使用一个“虚拟分类器”,该分类器会为所有样本预测出现频率最高的标签。

首先,从 sklearn 库中导入 DummyClassifier

from sklearn.dummy import DummyClassifier

接着,初始化这个虚拟分类器。这类分类器使用简单的规则对给定数据进行分类。我们将传入一个名为 strategy 的参数,用于决定分类器的工作方式。

dummy_clf = DummyClassifier(strategy='most_frequent')

strategy 设置为 ‘most_frequent’,意味着分类器将始终预测它在训练数据中看到的最频繁的标签。

然后,我们在训练数据上训练这个基准分类器。

dummy_clf.fit(X_train, y_train)

评估基准模型性能

现在,让我们检查这个基准模型在训练集和测试集上的性能。

与之前类似,我们首先在训练样本上进行预测。

dummy_train_pred = dummy_clf.predict(X_train)

我们将使用基准分类器,根据给定的训练集进行预测。

然后,我们将预测的标签与训练集的真实标签进行比较。

from sklearn.metrics import accuracy_score
train_accuracy = accuracy_score(y_train, dummy_train_pred)

我们可以检查准确率,在训练集上约为57%。

接着,让我们在测试集上进行预测并检查准确率。

dummy_test_pred = dummy_clf.predict(X_test)
test_accuracy = accuracy_score(y_test, dummy_test_pred)

传入真实标签和预测标签,我们得到的准确率分数约为58%。

结果解读

结果显示,我们的逻辑回归模型(76%准确率)确实超越了这一基准(58%准确率)。这有助于我们理解所学习模型的重要性,并证明其性能是显著的,而非随机猜测。

本节课中,我们一起学习了如何通过建立一个简单的基准模型(如虚拟分类器)来评估和解读我们训练模型的性能。理解模型相对于一个简单基准的提升,是判断模型实用价值的关键一步。

第二三部分 19:可视化决策边界 📊

在本节课中,我们将学习如何为一个二元分类问题可视化决策边界。我们将使用两个特征(一个数值型,一个分类型)来绘制数据点,并展示逻辑回归模型学习到的线性决策边界。通过这个过程,我们可以直观地评估模型的性能与局限性。


上一节我们介绍了逻辑回归模型的基础。本节中,我们来看看如何将模型学习到的决策边界进行可视化。

由于本演示中使用的是一个二元分类问题,并且仅使用了两个特征,因此我们可以使用Matplotlib库来可视化学习到的决策边界。需要注意的是,由于其中一个特征是分类型,散点图看起来会像一组水平线。

以下是绘制数据点的步骤:

  • 我们为每个样本绘制了“收入中位数”和“离海距离类别”这两个特征的散点图。
  • 然后,我们使用不同颜色为类别标签上色,其中类别0(紫色)和类别1(黄色)。
  • 对于每一组“收入中位数”和“离海距离”的值,我们可以看到对应的“房价中位数”类别标签(0或1,即紫色或黄色)。

现在,让我们在散点图之上绘制学习到的决策边界。

我们首先需要从训练好的分类器中获取必要的参数。以下是计算并绘制决策边界的关键步骤:

  • 获取截距和权重:我们从分类器中获取截距项以及每个特征的权重。
    intercept = classifier.intercept_
    weights = classifier.coef_
    
  • 计算决策边界:利用截距和权重,我们可以计算出决策边界的直线方程。
  • 绘制图形:我们将数据点和分类结果与决策边界一起绘制出来。

在此图中,红线代表我们的决策边界。在决策边界之上,我们有一个类别;在决策边界之下,我们有另一个类别。

原始数据本身无法仅使用这两个预测变量进行线性分离。这解释了逻辑回归模型性能有限的原因。

我们还可以观察到,在收入中位数较低的区域,数据点的类别混合更为明显。

从结果解释的角度来看,这些观察表明,对于中低收入样本的预测,我们的置信度会较低。

这些观察结果暗示,引入更多特征或使用非线性模型可能会有所帮助。


本节课中,我们一起学习了如何可视化逻辑回归的决策边界。我们通过绘制特征散点图并叠加决策边界直线,直观地理解了模型如何进行二元分类,并分析了模型在特定数据分布下的局限性,例如线性不可分问题以及低特征值区域的预测不确定性。这为后续考虑使用更复杂的模型或特征工程提供了直观依据。

第二三部分 20:创建混淆矩阵 📊

在本节课中,我们将学习如何创建和解读混淆矩阵。当我们的模型特征维度较高,难以直接可视化决策边界时,混淆矩阵是一个强大的工具,可以帮助我们直观地评估分类模型的预测结果。

混淆矩阵简介

上一节我们介绍了高维数据的可视化难题。本节中我们来看看如何利用混淆矩阵来观察学习模型的结果。

混淆矩阵以矩阵形式总结预测结果。首先,我们需要从Scikit-learn库中导入相关模块,并为训练集和测试集分别构建混淆矩阵。

以下是构建训练集混淆矩阵的步骤:

from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

# 第二三部分 构建训练集混淆矩阵
train_conf_matrix = confusion_matrix(y_train_true, y_train_pred, labels=classifier.classes_)

对于测试集,我们执行类似的操作,但传入测试集的真实标签和预测标签:

# 第二三部分 构建测试集混淆矩阵
test_conf_matrix = confusion_matrix(y_test_true, y_test_pred, labels=classifier.classes_)

可视化混淆矩阵

构造好混淆矩阵后,我们可以使用ConfusionMatrixDisplay方法将其可视化。

这将显示一个更直观的混淆矩阵版本,其中包含了真实值与预测值之间每种情况的样本数量。

顾名思义,混淆矩阵用于观察类别之间的混淆程度。我们可以看出在哪些情况下我们的预测错误更多,在哪些情况下我们的预测更准确。

对于二分类场景,矩阵按以下顺序显示:真阴性假阳性假阴性真阳性

观察上面的矩阵,我们可以发现,无论是测试集还是训练集,都存在相当数量的假阳性(位于矩阵右上角)。这表明我们将许多本应标记为0的样本错误地预测为1。

性能指标解读

为了进一步理解假阴性、假阳性等的影响,我们引入以下性能指标:

  • 精确率:正确阳性预测数占总阳性预测数的百分比。公式为:精确率 = TP / (TP + FP)
  • 召回率:正确阳性预测数占总实际阳性数的百分比。公式为:召回率 = TP / (TP + FN)
  • F1分数:精确率和召回率的调和平均数。公式为:F1 = 2 * (精确率 * 召回率) / (精确率 + 召回率)

这些指标可以通过Scikit-learn的classification_report方法轻松获取。

以下是生成分类报告的代码示例:

from sklearn.metrics import classification_report

print("训练集分类报告:")
print(classification_report(y_train_true, y_train_pred))

print("测试集分类报告:")
print(classification_report(y_test_true, y_test_pred))

从报告中我们可以看到,精确率约为76%,召回率约为75%-76%。平均而言,训练集和测试集的这些值都在75%或76%左右。

为何需要这些指标

我们除了准确率外还要观察这些指标,因为在现实场景中,假阳性和假阴性可能会带来严重后果。例如,在疾病诊断中,假阴性可能是灾难性的。精确率、召回率和F1分数能让我们更全面地理解这些情况。

本节课中我们一起学习了混淆矩阵的创建、可视化与解读。我们了解到,在面对高维数据时,混淆矩阵及其衍生的性能指标(精确率、召回率、F1分数)是评估分类模型性能、洞察模型错误类型不可或缺的工具。

第二三部分 21:决策树与高级预测分析导论 🌳

在本节课中,我们将学习预测分析的第二模块。我们将从基础的决策树模型开始,探索其原理与构建方法,然后深入更高级的集成方法——随机森林。通过本模块的学习,你将掌握使用Python构建和解释这些模型的能力,并能够应对更复杂的数据分析挑战。

模块概述 📋

模块2将我们的预测分析探索扩展到决策树以及更广泛的高级预测模型类别。

上一节我们介绍了预测分析的基础,本节中我们来看看更具体的模型类型。

决策树基础 🌱

我们首先从决策树的基础知识开始,了解它们是什么以及如何构建。

以下是关于决策树的核心要点:

  • 结构与类型:探索决策树的结构和不同类型。
  • 使用理由:理解在何种场景下选择使用决策树模型。

决策树通过一系列“是/否”问题对数据进行分割,其结构类似于一棵倒置的树。构建过程的核心是选择最佳分割特征,这通常通过计算信息增益基尼不纯度等指标来实现。

# 第二三部分 示例:使用scikit-learn计算基尼不纯度
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(criterion='gini')

集成方法与随机森林 🌲🌳

在了解了单一决策树之后,我们的旅程将继续深入探讨集成方法。

我们将特别关注随机森林。这是一种先进的技术,它通过组合多个决策树来提高预测准确性并防止过拟合。

以下是随机森林的关键机制:

  • 构建机制:学习随机森林背后的工作原理,包括自助采样和特征随机选择。
  • 性能评估:了解如何评估随机森林模型的性能。
  • 树剪枝的好处:理解对决策树进行剪枝如何提升模型泛化能力。

随机森林通过构建多棵决策树并汇总它们的结果(如投票或取平均)来工作,这能有效降低单一模型可能带来的方差。

实践与应用 🛠️

通过使用Python构建和解释决策树及随机森林模型,你将逐步理解这些强大的预测工具。

这将使你掌握解决更复杂数据分析挑战所需的技能。

为了巩固学习并增强动手经验,本模块配备了专注于决策树和随机森林的简短练习。

这提供了充足的机会,让你在各种数据集上练习和应用新获得的技能。

总结 📝

本节课中我们一起学习了预测分析模块二的核心内容。我们从决策树的基本概念、结构和使用场景出发,进而深入探讨了集成方法中的随机森林,包括其构建机制和优势。最后,我们强调了通过Python实践和练习来巩固这些技能的重要性。掌握这些工具将为你处理更高级的数据分析任务奠定坚实基础。

第二三部分 22:决策树模型 🎄

在本节课中,我们将要学习决策树模型。决策树是一种直观且强大的预测模型,它通过一系列规则对数据进行分类或回归预测,其过程类似于“二十个问题”游戏。

决策树的工作原理

上一节我们介绍了模型评估的基本概念,本节中我们来看看决策树是如何构建和工作的。

决策树模型类似于“二十个问题”游戏。通过不断提问,我们沿着树向下移动,逐步缩小可能性范围,直至得出结论。与游戏类似,我们希望既准确又高效地预测出正确答案。这要求我们提出正确的问题。我们需要考虑哪些问题能提供最多的信息,并将我们引向正确答案。

对于一个给定的训练数据集,决策树的学习过程遵循以下步骤:

  1. 首先,选择最佳特征来划分数据集。
  2. 其次,将数据集划分为子节点。
  3. 最后,如果某个划分中的所有样本都具有相同的标签,则停止该分支的生长;否则,对每个子节点递归地重复步骤1和2。

随着决策树的生长,我们将输入空间分割成多个矩形区域,每个区域包含具有相似标签的数据。

模型评估与应用类型

就像逻辑回归一样,为了评估决策树的模型性能,我们需要计算模型的预测准确率。同样,准确率的计算公式为:正确预测的数量 / 总预测数量。在实践中,我们可以使用Scikit-learn机器学习库中的 accuracy_score 函数。

决策树可以应用于回归和分类两类问题。

  • 回归树用于数值输出。每个区域包含具有相似输出值的点,输入的预测值是其所在区域输出值的平均值。
  • 分类树用于类别输出。每个区域包含相同类别的点,输入的预测类别是其所在区域中的多数类。

决策树的优缺点

以下是决策树模型的一些主要优点:

  • 易于解释和理解。
  • 可以衡量特征在决策过程中的重要性。
  • 能够处理定量和定性预测变量的混合。
  • 能够处理复杂的非线性关系。

在缺点方面,决策树容易过拟合,特别是当树变得又深又复杂时。当树捕捉到训练数据中的噪声或不相关模式时,就会发生过拟合,导致模型在未见数据上泛化能力差。可以通过剪枝技术来防止过拟合,即通过移除不必要的分支或节点来限制决策树的复杂性和大小。

总结

本节课中我们一起学习了决策树模型。我们了解了它通过递归提问划分数据的核心思想,掌握了其用于回归和分类的不同类型,并认识了其易于解释但需警惕过拟合的优缺点。理解这些是有效应用决策树进行预测分析的基础。

第二三部分 23:编程演示:数据加载与决策树创建 🌳

在本节课中,我们将学习如何使用Python加载数据并创建决策树模型。我们将使用加利福尼亚房价数据集,分别针对回归问题(预测房价中位数)和分类问题(预测价值分组)训练决策树模型,并最终与线性回归和逻辑回归模型进行比较。

概述与数据准备

决策树可以应用于回归和分类问题,并且非常擅长处理复杂的非线性关系。

在本次演示中,我们将再次利用加利福尼亚房价数据集。这次,我们将保留所有原始预测变量,为回归问题(预测房价中位数)和分类问题(预测价值分组)分别训练一个决策树模型。

首先,和往常一样,我们将加载数据集并进行设置,以复现之前演示中的环境。

以下是数据加载和初始设置的步骤:

  1. 加载数据框。
  2. 根据分组划分原则创建“价值分组”列,其中房价中位数高于2的被视为类别1,低于2的被视为类别0。
  3. 为两个问题划分预测变量和目标变量。
  4. 将预测变量设置为除“价值分组”和“房价中位数”列之外的所有列,这两列分别代表分类和回归的目标变量。
  5. 将“房价中位数”设为回归目标,将“价值分组”列设为分类目标。
  6. 在继续之前,按照训练集-测试集划分协议对所有数据进行划分。

我们为回归和分类案例都准备了训练集和测试集。同样,我们对原始数据集使用20%的测试集大小。

模型训练与比较

上一节我们完成了数据的准备工作,本节中我们来看看如何训练决策树模型并进行比较。

我们将分别训练回归决策树和分类决策树,然后使用相同的训练数据训练线性回归和逻辑回归模型,以便进行性能对比。


本节课中我们一起学习了如何加载加利福尼亚房价数据集、进行数据预处理、划分训练集与测试集,并初步建立了用于回归和分类的决策树模型框架。在接下来的课程中,我们将深入训练这些模型并评估它们的性能。

第二三部分 24:特征缩放编程演示 🧮

在本节课程中,我们将学习特征缩放的概念及其在机器学习中的重要性。我们将通过一个具体的编程演示,了解如何使用scikit-learn库中的StandardScaler方法来标准化数据特征,确保不同尺度的特征对模型训练的影响是均衡的。


查看数据的数值统计信息

首先,我们使用原始数据框并调用describe方法来查看数据的统计摘要。

df.describe()

在之前的演示中曾提到,当我们观察这些统计数据时,会注意到不同特征之间的尺度存在巨大差异。例如,人口特征的最大值可达35000,而收入中位数特征的最大值仅为15。尽管它们的单位不同,但如果所使用的特征尺度差异巨大,训练出的模型可能会偏向某些特征而忽略其他特征。

特征缩放的必要性

为了防止模型因特征尺度不同而产生偏差,我们需要应用特征缩放,将所有特征标准化到一个固定的范围内。

使用 StandardScaler 进行特征缩放

在本演示中,我们将使用scikit-learn库中的StandardScaler方法。该方法通过计算数据的均值和标准差来缩放特征:首先从每个数据点中减去均值,然后将结果除以标准差。

核心公式
scaled_value = (original_value - mean) / standard_deviation

请注意,我们只缩放预测变量,而不缩放目标变量。因为模型是从数据的预测变量中学习的。

以下是实施步骤:

  1. 导入并初始化:从sklearn.preprocessing导入StandardScaler并初始化缩放模型。

    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    
  2. 拟合缩放器:将缩放器拟合到我们的训练数据上。我们只在X_train上调用fit方法。

    scaler.fit(X_train)
    
  3. 转换数据:使用拟合好的缩放器,通过transform方法分别转换训练数据和测试数据。

    X_train_scaled = scaler.transform(X_train)
    X_test_scaled = scaler.transform(X_test)
    

重要注意事项:按照惯例,我们只将缩放器拟合到X_train上,然后使用同一个缩放器来转换X_test,而不会在X_test上重新拟合一个新的缩放器。这是因为测试集对于模型来说应该是一组完全未知的数据。如果在测试集上训练缩放器,就意味着我们计算了测试集的均值和标准差,暗示我们“知道”了测试集的一些信息。因此,通常我们避免在测试集上拟合任何模型。

检查缩放结果

转换完成后,我们可以检查缩放后的训练值。你会发现,现在的数值尺度比原来小得多,并且彼此之间似乎保持了一致的尺度。

其他缩放方法

除了标准缩放,还有其他特征缩放方法,例如:

  • 绝对最大缩放
  • 最小-最大缩放(归一化)

对于不同的问题,可能有更适合的缩放方法。你可以通过查阅scikit-learn的官方文档来了解更多关于这些缩放方法的信息。


总结:本节课我们一起学习了特征缩放的重要性。我们了解到,当数据特征尺度差异过大时,会导致模型训练出现偏差。通过使用scikit-learnStandardScaler,我们演示了如何将数据标准化,使其均值为0,标准差为1。关键点是,缩放器应仅在训练集上拟合,然后用同一个转换器去转换测试集,以保持数据处理的严谨性。掌握特征缩放是构建稳健机器学习模型的重要一步。

第二三部分 25:编程演示:构建决策树模型

在本节课中,我们将学习如何使用Python和Scikit-learn库来构建一个决策树模型。我们将从导入必要的模块开始,训练一个回归决策树,评估其性能,并分析模型过拟合的原因。最后,我们将通过限制树的深度来尝试解决过拟合问题。


数据准备与模型初始化

上一节我们完成了数据的特征缩放。本节中,我们来看看如何初始化并训练一个决策树回归模型。

首先,我们需要从Scikit-learn库中导入决策树回归器和评估指标。

from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error

接着,我们初始化决策树回归器。设置一个随机种子可以确保结果的可复现性。

dt_regressor = DecisionTreeRegressor(random_state=0)

训练模型与评估

模型初始化后,我们可以使用缩放后的训练数据来拟合模型。

dt_regressor.fit(X_train_scaled, y_train)

模型训练完成后,我们需要评估它在训练集和测试集上的表现。以下是评估步骤:

首先,在训练集上进行预测并计算平均绝对误差。

train_predictions = dt_regressor.predict(X_train_scaled)
train_mae = mean_absolute_error(y_train, train_predictions)
print(f"训练集MAE: {train_mae}")

你会发现,训练集上的MAE几乎为零,这表明模型在训练数据上表现近乎完美。

然而,这通常不是一个好现象,因为它可能意味着模型过拟合了。为了验证这一点,我们需要评估模型在测试集上的表现。

test_predictions = dt_regressor.predict(X_test_scaled)
test_mae = mean_absolute_error(y_test, test_predictions)
print(f"测试集MAE: {test_mae}")

运行后,你会看到测试集上的MAE显著更高。这种训练集表现极好而测试集表现较差的情况,明确指出了模型存在过拟合问题。一个好的模型应该同时在训练数据和未见过的测试数据上表现良好。


分析过拟合原因

为了理解决策树为何会过拟合,让我们查看一下树的结构。

以下是获取树的深度和叶子节点数量的代码:

tree_depth = dt_regressor.get_depth()
n_leaves = dt_regressor.get_n_leaves()
print(f"树深度: {tree_depth}")
print(f"叶子节点数: {n_leaves}")
print(f"训练样本数: {len(X_train)}")

执行后,你会发现这棵树非常深,并且最后一层的叶子节点数量几乎与训练样本数相同。这意味着树生长得过深,几乎为每一个训练样本都创建了一个独特的规则,从而学习了训练数据中的噪声,导致过拟合。


解决过拟合:限制树深度

防止过拟合的一个简单方法是限制决策树的最大深度。这可以阻止树生长得过于复杂。

在本演示中,我们将树的最大深度设置为7。关于更高级的剪枝技术,我们将在后续模块中讨论。

以下是设置最大深度并重新训练模型的代码:

dt_regressor_pruned = DecisionTreeRegressor(max_depth=7, random_state=0)
dt_regressor_pruned.fit(X_train_scaled, y_train)

现在,你可以重复之前的评估步骤,比较剪枝前后模型在测试集上的表现,通常会发现泛化能力有所改善。


本节课中我们一起学习了如何构建和评估决策树回归模型。我们经历了从模型初始化、训练、评估到诊断过拟合问题的完整流程。关键点在于,一个未经约束的决策树容易对训练数据过拟合,而通过限制其最大深度等简单方法,可以有效提升模型在未知数据上的泛化能力。

第二三部分 26:决策树与线性回归模型对比编程演示 🆚

在本节课中,我们将通过编程演示,对比决策树回归模型与线性回归模型在相同数据集上的表现。我们将训练两个模型,评估它们的性能,并分析结果。


上一节我们介绍了模型评估的指标,本节中我们来看看如何具体实现并比较两种不同的回归模型。

首先,我们使用深度限制来训练一个决策树模型,并将其与线性回归模型进行比较。

我们将初始化一个决策树回归器。这次,除了将随机状态设置为0,我们还将最大深度参数 max_depth 设置为7。

# 第二三部分 初始化决策树回归模型,设置最大深度为7,随机种子为0
decision_tree_regressor = DecisionTreeRegressor(max_depth=7, random_state=0)

完成初始化后,我们将回归器拟合到我们的训练集上。具体来说,我们将传入缩放后的训练特征 scaled_x_train 和回归问题的目标值 y_train

# 第二三部分 使用训练数据拟合决策树模型
decision_tree_regressor.fit(scaled_x_train, y_train)

与之前类似,我们将在训练集和测试集上进行预测,并使用训练好的模型计算两种情况下的平均绝对误差。

# 第二三部分 在训练集和测试集上进行预测
y_train_pred_dt = decision_tree_regressor.predict(scaled_x_train)
y_test_pred_dt = decision_tree_regressor.predict(scaled_x_test)

# 第二三部分 计算平均绝对误差
mae_train_dt = mean_absolute_error(y_train, y_train_pred_dt)
mae_test_dt = mean_absolute_error(y_test, y_test_pred_dt)

我们执行以上代码,并对线性回归模型重复相同的过程,正如我们在之前的演示中见过的那样。

我们将初始化一个线性回归模型,不更改任何默认设置。

# 第二三部分 初始化线性回归模型
linear_regression_model = LinearRegression()

我们将模型拟合到回归问题的训练数据集上。

# 第二三部分 使用训练数据拟合线性回归模型
linear_regression_model.fit(scaled_x_train, y_train)

我们做同样的事情:在训练集和测试集上进行预测,并计算两种情况下的平均绝对误差。

# 第二三部分 在训练集和测试集上进行预测
y_train_pred_lr = linear_regression_model.predict(scaled_x_train)
y_test_pred_lr = linear_regression_model.predict(scaled_x_test)

# 第二三部分 计算平均绝对误差
mae_train_lr = mean_absolute_error(y_train, y_train_pred_lr)
mae_test_lr = mean_absolute_error(y_test, y_test_pred_lr)

现在我们已经训练了两个模型,我们可以评估它们并展示评估结果,以比较哪个模型在我们的数据集上表现更好。

以下是两个模型的评估结果:

  • 对于决策树模型,训练集和测试集的平均绝对误差分别约为 0.430.47
  • 对于线性回归模型,训练集和测试集的平均绝对误差均约为 0.52

因此,我们可以看到,由于决策树在捕捉非线性关系方面的优势,其性能优于线性回归模型。然而,它仍然对训练数据集存在轻微的过拟合现象,这意味着在未来的优化中可能需要额外的剪枝操作。


本节课中我们一起学习了如何用代码实现决策树与线性回归模型的训练、预测与评估对比。我们看到,在此例中,带有深度限制的决策树模型在测试集上取得了更低的误差,但其在训练集和测试集上的误差差距也提示了过拟合的风险。这为后续的模型优化(如剪枝)指明了方向。

第二三部分 27:编程演示:决策树与逻辑回归模型对比 🆚

在本节课中,我们将学习如何对分类问题使用决策树和逻辑回归模型,并通过准确率来评估和比较它们的性能。

上一节我们介绍了回归问题的模型对比,本节中我们来看看分类问题的模型对比。我们将使用决策树分类器和逻辑回归模型,并在相同的数据集上评估它们的表现。


模型初始化与训练

首先,我们需要导入必要的库并初始化模型。

# 第二三部分 导入决策树分类器和逻辑回归模型
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

以下是初始化并训练决策树分类器的步骤:

  1. 初始化决策树分类器,设置最大深度 max_depth=7 和随机种子 random_state=0
  2. 使用标准化后的训练特征 scaled_X_train 和分类标签 y_train 来拟合模型。
  3. 对训练集和测试集进行预测。
  4. 使用 accuracy_score 函数计算两个预测结果的准确率。
# 第二三部分 初始化并训练决策树分类器
dt_classifier = DecisionTreeClassifier(max_depth=7, random_state=0)
dt_classifier.fit(scaled_X_train, y_train)

# 第二三部分 进行预测并计算准确率
y_train_pred_dt = dt_classifier.predict(scaled_X_train)
y_test_pred_dt = dt_classifier.predict(scaled_X_test)

train_accuracy_dt = accuracy_score(y_train, y_train_pred_dt)
test_accuracy_dt = accuracy_score(y_test, y_test_pred_dt)

接下来,我们对逻辑回归模型执行相同的流程。

以下是初始化并训练逻辑回归模型的步骤:

  1. 初始化逻辑回归模型。
  2. 使用相同的标准化训练数据 scaled_X_trainy_train 来拟合模型。
  3. 对训练集和测试集进行预测。
  4. 计算两个预测结果的准确率。
# 第二三部分 初始化并训练逻辑回归模型
lr_model = LogisticRegression()
lr_model.fit(scaled_X_train, y_train)

# 第二三部分 进行预测并计算准确率
y_train_pred_lr = lr_model.predict(scaled_X_train)
y_test_pred_lr = lr_model.predict(scaled_X_test)

train_accuracy_lr = accuracy_score(y_train, y_train_pred_lr)
test_accuracy_lr = accuracy_score(y_test, y_test_pred_lr)

结果比较与分析

现在两个模型都已训练完毕,并且我们计算了各自的准确率,可以打印出结果进行比较。

print("决策树模型准确率:")
print(f"  训练集: {train_accuracy_dt:.2%}")
print(f"  测试集: {test_accuracy_dt:.2%}")
print()
print("逻辑回归模型准确率:")
print(f"  训练集: {train_accuracy_lr:.2%}")
print(f"  测试集: {test_accuracy_lr:.2%}")

运行上述代码后,我们得到如下结果:

  • 决策树模型在训练集上的准确率约为 86%,在测试集上约为 83%
  • 逻辑回归模型在训练集和测试集上的准确率均为 83%

与回归问题类似,决策树模型的性能略优于逻辑回归模型,尽管优势在此案例中并不显著,因为两者的测试准确率非常接近。值得注意的是,逻辑回归模型在增加了更多特征后,其性能相较于之前的演示也有所提升


本节课中我们一起学习了如何用代码实现决策树与逻辑回归分类模型,并通过准确率这一核心指标对它们进行了评估和比较。我们了解到,在此特定数据集和参数设置下,决策树模型取得了稍好的表现。

第二三部分 28:决策树模型解读与可视化 🧠

在本节课中,我们将学习如何解读和可视化决策树模型。决策树不仅是一个强大的预测工具,其结构本身也极具解释性,能帮助我们理解决策过程并评估特征的重要性。

上一节我们介绍了决策树的基本概念,本节中我们将通过代码实践,深入了解决策树的结构和如何解读它。

可视化决策树结构

为了理解决策树如何进行决策,我们首先需要将其结构可视化。以下代码演示了如何使用 scikit-learnmatplotlib 绘制决策树。

from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

# 第二三部分 设置较大的图形尺寸和字体,以便清晰查看每一层
plt.figure(figsize=(20, 12))
plot_tree(model, filled=True, fontsize=10)
plt.show()

执行上述代码后,我们将看到决策树的完整结构图。即使我们将树的深度限制为7层,其结构仍然非常复杂。在较低的层级,你会看到大量的节点和叶子,它们覆盖了各种不同的数据情况。

解读树节点与决策规则

现在,让我们放大来解读树中的每个节点。在决策树的可视化图中,每个方块代表一个节点,其中包含一个决策规则,该规则将数据分割成两个不同的部分。

以下是解读单个节点的关键要素:

  • 决策规则:例如 X[6] <= -0.065。这表示基于第6个特征(例如“平均占用率”)的值是否小于等于-0.065来做决策。
  • 样本划分:例如 samples = 10000。这表示到达该节点的总样本数约为10000个。规则会将它们分到左右子节点,例如约8000个进入右节点,约2500个进入左节点。
  • 基尼指数:例如 gini = 0.5。这是一个介于0和1之间的值,用于衡量节点中样本分类的“纯度”。值越接近0,说明该节点中样本的类别越纯(几乎都属于同一类);值越高,则类别混合度越高。

在每一层,模型都会根据一个特征及其阈值做出决策,从而将数据一分为二。

控制模型复杂度与过拟合

从复杂的树结构中,我们需要关注一个关键问题:决策树在训练时很容易迅速变得非常庞大和复杂。

这是一个在训练决策树时需要特别注意的重要问题。它们可以非常快速、轻易地生长得非常大。

因此,你需要添加一定的限制条件,以确保你的树不会变得过于庞大和复杂,从而对训练数据产生过拟合。常用的限制参数包括 max_depth(最大深度)、min_samples_split(节点分裂所需最小样本数)等。

本节课中我们一起学习了如何可视化决策树的结构,并解读了其中的节点、决策规则和纯度指标。同时,我们也认识到控制决策树复杂度以防止过拟合的重要性。理解这些内容有助于我们更好地运用和解释决策树模型。

第二三部分 29:特征重要性量化与解读

在本节中,我们将学习如何从已构建的决策树模型中量化并解读各个特征的重要性。上一节我们介绍了决策树的结构和决策规则,本节中我们来看看如何将这些规则转化为可量化的特征重要性指标。

随着在决策树中向下遍历,数据会被分割成更小的分区。这个过程会持续进行,直到到达一个叶节点,在该节点中可以得出结论:此节点内的所有样本都具有相同的标签或非常相似的值。在树形图中,方块的位置越高,表明该决策规则的重要性越高。就分割质量而言,节点位置越高,分割效果越好。从树的结构来看,参与分割的特征越重要。

通过这些决策规则,我们可以更好地了解决策在预测过程中是如何做出的。这些规则反过来可以在实际的人类决策过程中作为参考。

我们也可以直接量化特征的重要性,如下所示。

以下是具体步骤,我们将创建一个Pandas DataFrame来存储特征及其重要性。

首先,创建一个名为features的列,其数据来源于原始预测变量X的列名。

# 第二三部分 假设 X 是包含特征的DataFrame
features = X.columns.tolist()

接着,创建一个名为importances的列表,用于存储每个特征的重要性值。这可以通过访问决策树分类器的feature_importances_属性来获得。

importances = dt_model.feature_importances_

一旦构建好包含特征名和重要性值的数据,我们将DataFrame中的行按照重要性降序排列。

# 第二三部分 创建DataFrame
importance_df = pd.DataFrame({'feature': features, 'importance': importances})
# 第二三部分 按重要性降序排序
importance_df = importance_df.sort_values(by='importance', ascending=False)

我们可以检查这个Pandas DataFrame。其中包含了每个特征及其对应的重要性值。

从这个DataFrame中,我们可以看到median income(收入中位数),其次是average occupancy(平均入住率),是决定一个房屋样本属于哪个价值群体的两个最相关的特征。

本节课中我们一起学习了如何从决策树模型中提取和解读特征重要性。我们了解到,通过分析树的结构和量化特征重要性,可以识别出对预测结果影响最大的关键因素,这有助于我们理解模型并指导现实决策。

第二三部分 30:高级导论

在本节课中,我们将学习高级预测分析的核心概念,包括更复杂的监督学习模型、无监督学习模型,并对不同模型进行高层次比较。

监督学习进阶与集成方法

上一节我们介绍了预测分析的基础。本节中,我们将探索更高级的监督学习模型,并深入研究集成方法,例如随机森林。

我们将探讨使用这些方法的原因,在Python中构建一个随机森林模型,并学习如何解读其结果。

以下是构建随机森林模型的关键步骤:

  • 导入库from sklearn.ensemble import RandomForestClassifier
  • 初始化模型model = RandomForestClassifier(n_estimators=100)
  • 训练模型model.fit(X_train, y_train)
  • 进行预测predictions = model.predict(X_test)

无监督学习与聚类分析

了解了监督学习后,我们来看看无监督学习模型。本节将讨论无监督学习的重要性,并深入探讨聚类分析。

我们将重点介绍K均值聚类,这是最流行的聚类算法之一。本节将指导你如何确定合适的聚类数量,并理解模型输出的含义。

以下是K均值聚类的核心公式和步骤:

  • 目标:最小化簇内平方和(WCSS),其公式为:WCSS = Σ Σ ||x_i - μ_j||²,其中x_i是簇j中的点,μ_j是簇j的中心。
  • 算法步骤
    1. 随机选择K个初始中心点。
    2. 将每个数据点分配到最近的中心点所在的簇。
    3. 重新计算每个簇的中心点(均值)。
    4. 重复步骤2和3,直到中心点不再变化或达到最大迭代次数。

模型比较与评估

最后,我们将对不同模型进行一个高层次的比较总结。

这包括对不同模型的输入输出类型进行概述,以及每种模型常用的评估指标。

以下是常见的评估指标:

  • 分类模型:准确率、精确率、召回率、F1分数、AUC-ROC曲线。
  • 回归模型:均方误差(MSE)、均方根误差(RMSE)、平均绝对误差(MAE)、R²分数。
  • 聚类模型:轮廓系数、戴维森堡丁指数。

本节课中,我们一起学习了高级预测分析的主要组成部分:从随机森林等集成方法,到K均值聚类等无监督学习技术,最后对比了不同模型的特性与评估方式。这些知识将帮助你为更复杂的数据分析任务选择合适的工具。

第二三部分 31:更多监督学习模型 🌳🤖

在本节课中,我们将学习几种更高级的监督学习模型。这些模型能够处理更复杂的数据和问题,捕捉更深层次的趋势与模式。

在上一模块中,我们介绍了一系列监督学习方法,包括线性回归、逻辑回归和决策树。每种模型在预测分析中都有其优势和局限性。对于更复杂的问题和数据,我们通常需要更高级的模型来捕捉其中的趋势和模式。

随机森林 🌲🌲🌲

本节中,我们来看看随机森林模型。随机森林是一种集成学习方法,它结合了多个决策树。随机森林以其鲁棒性著称,能有效处理具有复杂交互关系的高维数据。

以下是随机森林的一些常见应用领域:

  • 图像识别
  • 推荐系统
  • 生物信息学

支持向量机 ⚔️

上一节我们介绍了随机森林,本节中我们来看看支持向量机。支持向量机是一种强大的模型,可用于分类和回归任务。它的核心思想是找到一个最优超平面,以最大间隔来分隔数据点。

以下是支持向量机的一些广泛应用领域:

  • 文本分类
  • 图像分类

梯度提升模型 📈

除了随机森林和支持向量机,梯度提升模型是另一类强大的集成方法。梯度提升模型通过迭代地组合多个弱学习器,来构建一个强大的预测模型。

以下是梯度提升模型表现出色的几个领域:

  • 网页搜索排名
  • 异常检测
  • 信用风险建模

在本模块中,我们将重点探讨随机森林及其应用。


本节课中我们一起学习了几种高级监督学习模型:随机森林支持向量机梯度提升模型。我们了解了它们的基本概念、核心思想以及各自适用的领域。这些模型为处理复杂的预测分析问题提供了更强大的工具。

第二三部分 32:随机森林 🌲

在本节课中,我们将要学习一种强大的机器学习算法——随机森林。我们将了解什么是集成方法,随机森林如何工作,以及它的优缺点。最后,我们还会探讨决策树剪枝技术,这是防止模型过拟合的重要方法。

集成方法简介

上一节我们介绍了决策树,本节中我们来看看如何将多个决策树组合起来,形成更强大的模型。

集成方法是一种机器学习技术,它将多个独立的模型组合起来进行预测。集成方法不依赖单一模型,而是旨在利用多个模型的集体知识和专长,以提高预测性能和泛化能力。直观地说,使用集成方法类似于基于多个个体的平均投票来做决策,而不是依赖于单个个体的投票。

集成方法有许多优点。

以下是集成方法的主要优势:

  • 提高准确性:通过组合具有互补优缺点的多个模型,集成方法可以捕获更广泛的模式,做出更准确的预测。
  • 减少过拟合并增强鲁棒性:通过组合不同的模型,集成方法可以通过平均掉单个模型的偏差和误差来降低过拟合的风险,因此对噪声和异常值更具鲁棒性。
  • 处理复杂性:通过组合具有不同视角或使用不同算法的模型,集成方法可以捕获单个模型可能遗漏的复杂模式和非线性关系。

总的来说,集成方法通过利用多个独立模型的组合知识和多样性,用于提高机器学习模型的性能、鲁棒性和泛化能力。

随机森林详解

了解了集成方法的概念后,本节我们来深入探讨随机森林的具体工作原理。

随机森林是一种集成学习方法,它结合多个决策树进行预测。它是一种流行且强大的机器学习算法,可用于分类和回归任务。随机森林这个名字源于它创建了一个决策树的“森林”,其中每棵树都是使用训练数据的随机子集和输入特征的随机子集构建的。

让我们仔细看看随机森林模型在训练期间内部发生了什么。

  • 随机森林通过一个称为自助采样的过程,随机且有放回地对原始数据进行采样,为森林中的每棵决策树训练一个不同的数据子集。直观地说,这允许树学习数据更多样化的视角。
  • 森林中的每棵树都是通过基于信息增益等标准递归地划分其数据子集来生长的,直到满足停止标准(例如达到最大深度)。
  • 为了进行预测,森林中的每棵树根据输入特征独立输出一个预测。对于分类任务,单个树的预测通过多数投票进行聚合;对于回归任务,预测则被平均。聚合的结果成为森林的输出。

与决策树类似,随机森林可以应用于回归和分类场景。因此,用于决策树的评估指标也可以应用于随机森林。对于回归问题,我们可以使用均方误差函数;对于分类问题,我们可以使用准确率得分函数

随机森林的优缺点

我们已经了解了随机森林如何运作,现在我们来总结一下它的长处和短处。

随机森林有其优点。

以下是随机森林的主要优点:

  • 减少过拟合:决策树更容易过拟合,而随机森林通过组合多个模型来减少过拟合。
  • 提高性能:与单个决策树相比,随机森林提供了更好的性能和鲁棒性。

随机森林也有其缺点。

以下是随机森林的主要缺点:

  • 可解释性较低:由于结合了多个模型的集成特性,随机森林与决策树相比可解释性较低。
  • 训练时间更长:训练多棵树可能导致训练时间增加,特别是对于大型数据集。

决策树剪枝技术

正如我们之前所见,在复杂数据集上训练时,树可能会变得非常庞大,这可能导致过拟合。树剪枝是基于树的算法中使用的一种技术,用于降低模型的复杂性和过拟合。它涉及从树中移除特定的分支或节点,以提高其在未见数据上的泛化能力和性能。

主要有两种类型的树剪枝。

以下是两种主要的剪枝方法:

  • 预剪枝:在决策树完全展开之前,使用某些条件或启发式方法停止其生长。常见的预剪枝技术包括:
    • 最大深度:限制树的最大深度或层数。
    • 最小样本数:指定节点中需要满足进一步分裂所需的最小样本数。
  • 后剪枝:让决策树生长到最大尺寸,然后根据某些标准选择性地移除节点或分支。常见的后剪枝技术包括:
    • 最小误差剪枝:从叶子节点开始,临时移除每个节点。如果模型的误差减少,则接受移除。
    • 子树替换:每个子树被临时替换为一个叶子节点,并测量剪枝后子树的性能。如果剪枝后的子树比原子树表现更好,则接受替换。


本节课中我们一起学习了随机森林。我们了解到随机森林是一种集成学习方法,它通过构建多棵决策树并综合它们的预测结果,来获得比单棵决策树更稳定、更准确的模型。我们还探讨了其优缺点,并学习了通过预剪枝和后剪枝来优化决策树、防止过拟合的技术。

第二三部分 33:随机森林数据加载与预处理 📊

在本节课中,我们将学习如何为一个实际的商业问题——贷款分类,准备数据。我们将使用来自美国小企业管理局(SBA)的数据集,通过随机森林模型来预测贷款是被批准还是被拒绝。课程的核心是数据加载、清洗和预处理,为后续的模型训练打下坚实基础。

数据加载与初步观察

首先,我们从CSV文件加载数据集。为了简化演示,我们将删除一些在本例中不会用到的特征列。

以下是本演示将包含的特征:

  • NoEmp:企业员工数量。
  • NewExist:企业状态(现有或新创)。
  • CreateJob:创造的就业岗位数。
  • RetainedJob:保留的就业岗位数。
  • UrbanRural:企业位于城市、农村或未定义区域。
  • RevLineCr:是否有循环信用额度。
  • LowDoc:是否为低文档贷款项目。
  • DisbursementGross:贷款发放总额。
  • MIS_Status:贷款状态(目标变量)。“P I F” 表示全额偿还(批准),“CHGOFF” 表示坏账核销(拒绝)。

我们可以使用 df.info() 快速浏览数据概况。数据集中大约有90万条记录,包含数值型和非数值型数据。同时,我们注意到某些特征在部分记录中存在缺失值。

数据清洗:处理缺失值与无效标签

由于这是一个未经预处理的真实世界数据集,我们需要谨慎处理潜在的错误条目,例如缺失值或无效、不一致的标签。

上一节我们介绍了数据概况,本节中我们来看看如何处理数据中的“杂质”。

处理缺失值

对于在 NewExistRevLineCrLowDoc 以及目标变量 MIS_Status 中发现的缺失值,我们采取直接删除包含缺失值记录的方法。

df.dropna(inplace=True)

执行此操作后,数据条目数量减少,但所有缺失值已被移除。

处理无效的分类标签

接下来,我们检查包含非数值数据的变量:RevLineCrLowDocMIS_Status。根据描述,这些应是二元分类标签。

以下是检查各列唯一值及其样本数量的方法:

print(df[‘RevLineCr’].value_counts())
print(df[‘LowDoc’].value_counts())
print(df[‘MIS_Status’].value_counts())

检查发现:

  • RevLineCrLowDoc 列中,除了预期的 “Y” 和 “N” 外,还存在其他未在描述中提及的无效标签。
  • MIS_Status 的标签与描述一致,没有无效标签。

因此,我们需要从数据集中删除包含无效标签的记录。

# 第二三部分 创建布尔条件,筛选出 RevLineCr 和 LowDoc 列中标签为 ‘Y’ 或 ‘N’ 的记录
valid_data = df[(df[‘RevLineCr’].isin([‘Y’, ‘N’])) & (df[‘LowDoc’].isin([‘Y’, ‘N’]))]
df = valid_data

处理数值型分类特征

NewExistUrbanRural 虽然是数值,但代表分类信息。我们需要确保其取值与描述一致(NewExist 应为1或2;UrbanRural 应为0、1或2)。

检查发现 NewExist 列中存在意外的标签 0。我们同样移除这些记录。

df = df[df[‘NewExist’] != 0]

至此,我们已清除了所有分类变量中的不一致数据。

数据转换:编码与格式化

现在,我们将清理后的非数值数据转换为数值格式,以便模型处理。

分类变量编码

对于分类变量 RevLineCrLowDocMIS_Status,我们可以使用Pandas的 factorize() 方法进行整数编码。

# 第二三部分 对 RevLineCr 列进行编码
df[‘RevLineCr_encoded’], revlinecr_labels = pd.factorize(df[‘RevLineCr’])
# 第二三部分 对 LowDoc 列进行编码
df[‘LowDoc_encoded’], lowdoc_labels = pd.factorize(df[‘LowDoc’])
# 第二三部分 对目标变量 MIS_Status 列进行编码
df[‘MIS_Status_encoded’], target_labels = pd.factorize(df[‘MIS_Status’])

编码后,数据框中会新增三列包含数值标签的列。

格式化数值字符串

DisbursementGross 列本应是数值,但存储格式包含美元符号($)和逗号(,),阻碍了其被识别为数值类型。我们需要将其转换为浮点数。

df[‘DisbursementGross’] = df[‘DisbursementGross’].apply(lambda x: float(x.strip().replace(‘$’, ‘’).replace(‘,’, ‘’)))

应用此转换后,DisbursementGross 列的数据类型变为 float64

准备训练与测试数据

所有预处理步骤完成后,我们的数据集已完全数值化且无缺失值,可以用于训练随机森林模型。

我们首先定义目标变量和预测特征,然后按照8:2的比例划分训练集和测试集。

from sklearn.model_selection import train_test_split

# 第二三部分 定义预测特征 X:移除原始分类文本列和已编码的目标变量列
X = df.drop([‘MIS_Status’, ‘RevLineCr’, ‘LowDoc’, ‘MIS_Status_encoded’], axis=1)
# 第二三部分 定义目标变量 y:使用编码后的贷款状态
y = df[‘MIS_Status_encoded’]

# 第二三部分 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

注意DisbursementGross 的数值尺度远大于其他特征。对于基于信息增益进行优化的树模型(如随机森林),特征尺度不影响模型性能,因此本例中我们跳过了特征缩放步骤。鼓励你探索数据集中其他未使用的特征。

总结

本节课中我们一起学习了为随机森林模型准备数据的完整流程。我们从加载SBA贷款数据集开始,逐步进行了数据清洗(处理缺失值和无效标签)、数据转换(分类变量编码和字符串格式化),最后定义了特征和目标并完成了数据集划分。经过这些步骤,我们得到了一个干净、可用于机器学习模型训练的数值化数据集。在接下来的课程中,我们将使用这个预处理好的数据来构建和评估随机森林分类模型。

第二三部分 34:树预剪枝与基线决策树 🌳

在本节课中,我们将学习决策树模型中的预剪枝技术,并建立一个基线模型。我们将通过限制树的生长来防止过拟合,并评估其性能。


上一节我们介绍了决策树的基本概念,本节中我们来看看如何通过预剪枝来控制树的复杂度。

接下来,我们将执行树预剪枝。预剪枝涉及在决策树完全展开之前停止其生长。这可以防止树模型对数据产生过拟合。在本演示中,我们将通过限制最大深度和最小样本数来进行预剪枝。

我们将把预剪枝条件保存到两个变量中以便后续使用。我们将设置最大深度为20,这仍然是一棵相当大的树。同时,我们将设置min_samples_split参数,它定义了节点继续分裂所需的最小样本数。

以下是具体的代码实现:

# 第二三部分 导入决策树分类器
from sklearn.tree import DecisionTreeClassifier

# 第二三部分 设置预剪枝参数
max_depth = 20
min_samples_split = 10

# 第二三部分 创建并训练基线决策树模型
baseline_tree = DecisionTreeClassifier(max_depth=max_depth,
                                       min_samples_split=min_samples_split,
                                       random_state=42)
baseline_tree.fit(X_train, y_train)

在建立了基线决策树模型后,我们需要一个评估标准来衡量其表现。

我们将使用决策树分类器模型作为基线,以展示随机森林在处理复杂大规模数据集时的优势。对于这个分类问题,我们将使用准确率作为评估指标。

以下是计算准确率的步骤:

# 第二三部分 导入准确率评分函数
from sklearn.metrics import accuracy_score

# 第二三部分 计算训练集和测试集上的准确率
train_accuracy = accuracy_score(y_train, baseline_tree.predict(X_train))
test_accuracy = accuracy_score(y_test, baseline_tree.predict(X_test))

我们在此案例中可以看到结果。训练准确率约为84%,测试准确率约为80%。虽然这个结果相当不错,但数据表明存在一定程度的过拟合:模型在训练集上表现非常好,但在测试集上表现稍逊。这意味着模型的泛化能力未达到我们的期望。


本节课中我们一起学习了决策树的预剪枝技术。我们通过设置max_depthmin_samples_split参数建立了一个基线模型,并观察到其在训练集和测试集上的性能差异,这揭示了过拟合的存在。接下来,让我们继续训练我们的随机森林分类器,看看它是否能提供更好的泛化性能。

第二三部分 35:构建随机森林分类器 🌲

在本节课中,我们将学习如何使用Python的Scikit-learn库构建一个随机森林分类器。我们将从初始化模型开始,逐步完成训练和评估过程,并理解其相对于单棵决策树的优势。

上一节我们介绍了决策树的基本原理,本节中我们来看看如何集成多棵决策树来构建一个更强大的模型——随机森林。

模型初始化与参数设置

首先,我们需要从Scikit-learn的集成学习模块中导入随机森林分类器。

以下是初始化随机森林分类器的关键步骤和参数:

  • 导入类:使用 RandomForestClassifier
  • 设置最大深度 (max_depth):此参数控制森林中每棵决策树允许的最大分裂次数,用于防止过拟合。
  • 设置最小样本分裂数 (min_samples_split):此参数指定分裂一个内部节点所需的最小样本数。
  • 设置评估器数量 (n_estimators):此参数决定随机森林中决策树的数量,本例中我们设置为20。
  • 设置随机状态 (random_state):为了确保结果可重现,我们将其设置为0。

初始化模型的示例代码如下:

from sklearn.ensemble import RandomForestClassifier

rf_clf = RandomForestClassifier(
    max_depth=5,
    min_samples_split=10,
    n_estimators=20,
    random_state=0
)

模型训练与评估

初始化分类器后,我们使用训练数据对其进行拟合。由于需要训练20棵决策树,此过程可能比训练单棵决策树耗时更长。

模型训练完成后,我们需要评估其性能。与决策树分类器类似,我们使用准确率分数来评估模型在训练集和测试集上的表现。

以下是评估模型性能的步骤:

  1. 训练集预测:使用训练好的模型对训练集 X_train 进行预测,得到预测标签 train_pred
  2. 训练集准确率计算:通过 accuracy_score 函数,比较真实的训练标签 y_train 和预测标签 train_pred,计算训练准确率。
  3. 测试集预测与评估:重复上述过程,对测试集 X_test 进行预测,并计算测试准确率。

核心评估代码如下:

from sklearn.metrics import accuracy_score

# 第二三部分 训练集评估
train_pred = rf_clf.predict(X_train)
train_accuracy = accuracy_score(y_train, train_pred)

# 第二三部分 测试集评估
test_pred = rf_clf.predict(X_test)
test_accuracy = accuracy_score(y_test, test_pred)

运行评估后,我们可能得到约84%的训练集准确率和约81%-82%的测试集准确率。

结果分析与总结

虽然在本例的特定参数设置下,性能提升并不巨大,但结果揭示了一个重要模式:随机森林分类器保持了与单棵决策树相近的训练准确率,同时获得了更高的测试准确率。

这意味着,通过在森林中包含多棵树并汇总它们的结果,模型获得了更好的泛化能力。其核心思想是集成学习中的“集体智慧”,通过平均多棵树的预测,可以减少单棵树可能产生的过拟合和方差,从而使模型在未见过的数据上表现更稳定、更可靠。

本节课中我们一起学习了随机森林分类器的构建、训练与评估全过程。我们了解到,通过集成多棵决策树,随机森林能够有效提升模型的泛化性能,是解决分类问题的一个强大且实用的工具。

第二三部分 36:随机森林模型解读 🧠

在本节课中,我们将学习如何解读随机森林模型。我们将通过可视化森林中的决策树,并计算特征重要性,来理解这个由多棵树组成的“森林”是如何做出预测决策的。


可视化森林中的决策树 🌲

上一节我们介绍了随机森林的基本概念,本节中我们来看看如何可视化其中的决策树。

我们可以使用 plot_tree 方法来绘制森林模型中每一棵树,从而可视化其学习过程。由于这些树通常非常庞大,我们将只绘制森林中前三棵已学习树的前三层。

首先,快速查看一下随机森林分类器的评估器(即单棵树)。

# 第二三部分 查看随机森林中的决策树
print(classifier.estimators_)

这段代码会显示随机森林中使用的各个决策树分类器。我们的森林中包含20棵决策树,每棵树都在数据的不同子集上进行训练。

接下来,我们选取前三棵树,并使用 plot_tree 方法将其绘制出来。我们将限制树的深度,因为它们非常庞大。

# 第二三部分 绘制前三棵树的前三层
for i in range(3):
    plt.figure(figsize=(20, 10))
    plot_tree(classifier.estimators_[i],
              feature_names=X_train.columns,
              class_names=['Not Approved', 'Approved'],
              filled=True,
              max_depth=3) # 限制深度
    plt.title(f'Estimator {i} (First 3 Layers)')
    plt.show()

运行后,我们将看到这三棵树在数据集上训练后的样子。

这是前三棵评估器(树)前三层的图示。你会注意到,尽管我们在技术上使用相似的数据进行训练,但每棵树在每一层都学习了不同的分割规则。

以下是观察结果:

  • 评估器0(第一棵树)根据“城乡”特征进行分割。
  • 评估器1(第二棵树)根据“保留工作岗位”特征进行分割。
  • 评估器2(第三棵树)根据“拨款总额”特征进行分割。

因此,这些树将以不同的方式生长。这是因为在森林模型的训练过程中,每棵树都在原始数据集的不同子集上进行训练,这意味着它们从原始数据集中获得了不同的“知识”。通过对这些知识进行平均,我们能对数据集中存在的模式有一个更概括性的理解,从而可以避免像使用单棵树时可能出现的过拟合问题。


理解特征重要性 📊

正如我们之前在决策树中看到的,树模型允许我们理解特征的重要性。对于由多棵树组成的随机森林,我们不再拥有绝对的特征重要性度量。然而,我们仍然可以通过查看森林中所有树的特征重要性得分的平均值标准差,来对特征重要性有所理解。

让我们计算并绘制出所有用作预测变量的特征的平均值和标准差特征重要性得分。

首先,从预测变量列中提取特征名称。这将用于绘制特征重要性的标题。

# 第二三部分 提取特征名称
feature_names = X_train.columns

我们可以直接从森林中提取平均特征重要性值,访问 feature_importances_ 属性。这些值是所有树上的平均值。

# 第二三部分 提取平均特征重要性
importances = classifier.feature_importances_

利用这个平均值,我们可以使用NumPy的方法来估算标准差(别忘了导入NumPy)。

import numpy as np

# 第二三部分 计算标准差
std = np.std([tree.feature_importances_ for tree in classifier.estimators_], axis=0)

这将得到整个森林的标准差值。

最后,我们创建一个名为 Forest_Importances 的Series(Series本质上是一个单列的数据框)。其值将是重要性分数,标签将是特征名称。

import pandas as pd

# 第二三部分 创建特征重要性Series
Forest_Importances = pd.Series(importances, index=feature_names)

一旦设置完成,我们就可以绘制该Series的条形图,并提供一个与特征标准差相对应的误差值。

# 第二三部分 绘制带误差条的特征重要性图
fig, ax = plt.subplots()
Forest_Importances.plot.bar(yerr=std, ax=ax)
ax.set_title("Feature Importances with Standard Deviation (Random Forest)")
ax.set_ylabel("Mean Importance Score")
fig.tight_layout()
plt.show()

在我们的图中,可以看到“拨款总额”具有最高的平均特征重要性,第二高的是“保留工作岗位”。但在这两者中,最重要的是“拨款总额”。因此,基于此,当判断贷款是否被批准时,你可能需要首先查看“拨款总额”这一特征,并优先考虑它而不是其他特征。


本节课中我们一起学习了如何解读随机森林模型。我们通过可视化森林中的单棵树,理解了其多样化的决策路径;并通过计算特征重要性的均值与标准差,识别出对预测结果影响最大的关键特征(如“拨款总额”)。这有助于我们理解模型的决策依据,并聚焦于最重要的数据维度。

第二三部分 37:无监督学习与聚类导论 🧩

在本节课中,我们将要学习无监督学习的基本概念,特别是其核心方法——聚类。我们将了解它与监督学习的区别,并初步探索聚类的类型和应用。

课程的最后一个模块将引导你进入无监督学习的世界。在这个领域中,算法从无标签数据中学习模式。我们将无监督学习与监督学习进行对比,以突出其独特的挑战和可能性。

上一节我们介绍了无监督学习的整体框架,本节中我们来看看本模块的核心内容。

本模块聚焦于聚类,这是无监督学习中的一项主要技术,用于根据相似性对数据点进行分组。我们将涵盖聚类的概念,深入探讨不同的类型,例如 K均值聚类,并讨论确定最佳聚类数量的方法。通过实践练习,你将使用Python构建和解释聚类模型,并深入了解这些模型的实际应用和解读。本模块不仅完善你对预测分析的理解,还使你具备比较和选择最适合各种分析任务的模型的知识,从而展示无监督学习在数据科学中的强大功能和多样性。

以下是本模块将涵盖的核心主题列表:

  • 无监督学习:从无标签数据中发现模式。
  • 聚类:根据相似性对数据点进行分组。
  • K均值聚类:一种广泛使用的划分聚类方法。
  • 确定最佳聚类数:评估聚类模型质量的关键步骤。

本节课中我们一起学习了无监督学习的基本概念及其与监督学习的区别,并重点介绍了聚类技术作为无监督学习的核心。我们了解到,本模块将通过实践帮助我们掌握使用Python进行聚类分析,并学会如何解读和应用聚类模型的结果。

第二三部分 38:无监督学习概述

在本节课中,我们将要学习无监督学习的基本概念、它与监督学习的区别,以及它在现实世界中的主要应用场景。

课程概述

回忆一下,监督学习模型试图根据一组已标记的示例进行预测。

无监督学习则试图在未标记的数据中发现模式、结构或关系。

与监督学习不同,在无监督学习中,没有明确的正确答案或特定的结果需要预测。

核心概念与示例

为了更好地理解无监督学习,让我们来看一个具体的例子。

假设你有一个数据集,其中包含一个电子商务网站客户的信息,这些信息包含各种属性,例如年龄、收入和浏览行为。然而,你没有任何为这些客户预定义的标签或类别。

使用无监督学习,你可以根据这些客户的相似性对他们进行分组。例如,一个组可能由所有高收入人群组成。

通过检查产生的分组及其特征,你可以获得关于客户群体的宝贵见解。这些信息可用于定制营销策略、个性化推荐,或为每个已识别的客户群设计特定的客户体验。

无监督学习的优势

在许多现实场景中,获取已标记的数据可能具有挑战性、昂贵或耗时。无监督学习使我们能够利用通常容易获得的大量未标记数据。

无监督学习对于检测数据中新颖或意外的模式非常有价值。这在异常检测、欺诈检测或识别可能感兴趣的罕见事件中特别有用。

无监督学习还可以通过帮助我们理解数据和发现隐藏模式来补充监督学习,这为后续的数据分析、数据预处理和模型开发奠定了基础。

无监督学习的商业应用

无监督学习模型在不同行业中有各种商业用例。以下是几种常见的模型及其应用:

  • 聚类模型:根据相似性将数据分组到簇中。应用包括客户细分和文档聚类。
  • 孤立森林:通过在随机森林中隔离实例来识别异常。它对于欺诈检测和网络入侵检测非常有效。
  • 自编码器:通常用于数据压缩、异常检测和去噪。

在本模块中,我们将重点理解聚类模型。

总结

本节课中,我们一起学习了无监督学习的核心思想。我们了解到,无监督学习旨在从无标签的数据中发现内在结构和模式,这与有明确预测目标的监督学习形成对比。我们探讨了它在客户细分等场景中的应用,并列举了几种常见的无监督学习模型及其商业价值。接下来,我们将深入探讨其中的聚类模型。

第二三部分 39:聚类与K均值算法概述

在本节课中,我们将要学习一种名为“聚类”的无监督学习技术。我们将了解其基本概念、常见算法,并重点学习K均值聚类算法的原理与实现步骤。

聚类是一种无监督学习技术,用于根据数据点内在的特征或相似性,将相似的实例或数据点分组在一起。聚类的目标是在没有先验类别标签或目标值知识的情况下,识别数据集中的自然分组或簇。聚类广泛应用于多个领域,包括客户细分、图像分析、文档分类、异常检测和推荐系统。它对于数据探索、模式发现、可视化以及理解复杂数据集非常有帮助。

存在多种类型的聚类算法,每种算法都有其自身的方法和特点。一些例子包括:

  • K均值聚类:这是最流行的聚类算法之一。它将数据划分为K个簇,其中K是预先确定的数字,通过最小化数据点与其簇质心之间的平方距离之和来实现。
  • 层次聚类:通过基于相似性迭代地合并或拆分簇来创建簇的层次结构,直到满足停止标准。
  • 高斯混合模型:假设数据是由多个高斯分布混合生成的。该模型通过估计这些高斯分布的参数来将数据点分配到不同的簇。

聚类算法的选择取决于数据的性质、期望的簇属性,以及最终要解决的具体问题。

在本模块中,我们将详细介绍K均值聚类。

聚类分析:2:K均值聚类算法详解

上一节我们介绍了聚类的概念和常见算法类型,本节中我们来看看最常用的K均值聚类算法的具体步骤。

K均值聚类的目标是根据相似性,将数据划分为K个簇,其中K是预先确定的数字。

以下是K均值聚类算法的步骤:

  1. 初始化质心:随机选择K个数据点作为K个簇的初始质心。
  2. 分配数据点:通过最小化数据点与簇质心之间的距离来将数据划分到K个簇中。换句话说,对于每个数据点,我们识别其最近的质心,并将该点归入相应的簇。
  3. 更新质心:对于新形成的K个点簇,通过计算簇中所有点的平均值来得到新的质心。
  4. 迭代优化:重复步骤2和步骤3,直到簇不再发生变化或达到停止标准。

与监督学习场景不同,在执行聚类时,我们通常不知道正确答案。因此,我们不能使用准确率或均方误差来确定哪个簇数量能让模型表现最佳。

然而,回想一下,K均值聚类的目标是最小化数据点与质心之间的距离。因此,我们可以定义一个称为平方距离和(也称为惯性)的指标,它计算数据点与其所属簇的质心之间的欧几里得距离的平方和。

在实践中,我们可以使用Scikit-learn库中sklearn.cluster.KMeans模型的inertia_属性来获取该值。

from sklearn.cluster import KMeans
# 第二三部分 假设X是数据
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
inertia = kmeans.inertia_
print(f"模型的惯性(平方距离和)为:{inertia}")

聚类分析:3:如何确定最佳簇数量(K值)

上一节我们学习了K均值算法的运行过程,并引入了“惯性”作为评估指标。本节中我们来看看如何利用这个指标来确定最佳的簇数量K。

为了确定最优的簇数量,我们可以绘制不同K值对应的惯性(即平方距离和)曲线,并寻找曲线的“肘部”。在“肘部”点,惯性的下降速度开始显著减缓。该点对应的K值通常被认为是最优的,尽管更大的K值会导致惯性更低。

选择“肘部”对应的K值而非更大的K值,主要基于以下考虑:

  • 计算成本:更大的K值会导致模型计算更加昂贵。
  • 实用性:如果簇的数量显著过大,每个簇会变得太小,无法提供任何关于数据的有用见解。

本节课中我们一起学习了聚类分析的基本概念,重点剖析了K均值聚类算法的原理、步骤和关键指标“惯性”。我们还掌握了通过“肘部法则”来确定最佳簇数量K的实用方法。聚类是一种强大的数据探索工具,能帮助我们在无标签的数据中发现内在的结构和模式。

第二三部分 40:数据加载与预处理 📊

在本章中,我们将学习如何为K均值聚类模型准备数据。我们将从一个杂货店客户数据集中加载数据,选择相关特征,并进行必要的预处理,例如特征缩放。这些步骤是任何机器学习项目成功的基础。

概述

客户细分是指根据客户特征的相似性,将客户划分为不同组别的过程。在本编程示例中,我们将对一家杂货店数据库中的客户记录进行无监督的K均值聚类。数据集包含2240个客户数据样本,每个样本有29个属性,涵盖了客户个人信息(如收入、教育程度、出生年份)、购买信息(如在不同类型产品上的花费)以及活动信息(如每月网站访问次数)。为了在本演示中便于可视化,我们将从29个属性中仅选择3个用于聚类。我们鼓励您查看完整的数据和描述。

数据加载与初步检查

首先,我们将使用Pandas库读取数据集的CSV文件,并将其存储在一个Pandas数据框中。然后,使用info方法检查我们正在使用的数据集中的特征。

import pandas as pd

# 第二三部分 读取CSV文件
df = pd.read_csv('customer_data.csv')
# 第二三部分 查看数据框信息
df.info()

在原始数据集中,正如前面提到的,我们有29个属性。这意味着我们正在处理一个相对高维的数据集。高维数据的问题是,如果我们想绘制数据点,很难直观地进行可视化。

特征选择

因此,在本演示中,我们将选择29个属性中的一个子集,而不是使用全部。我们将重点关注客户活动,并根据网站购买次数目录购买次数门店购买次数进行聚类。这里的目标是基于这三个特征,获得能反映特定购买行为的客户群。

以下是选择这三个特征的方法:

# 第二三部分 从原始数据框中索引出我们需要的三个特征
df_purchase = df[['NumWebPurchases', 'NumCatalogPurchases', 'NumStorePurchases']]
# 第二三部分 使用head方法检查数据集的前几个样本
df_purchase.head()

现在,我们可以再次查看这个子集的信息:

df_purchase.info()

我们有三个特征,它们都是数值型的整数,并且似乎没有任何缺失值。这些计数都是非空的。

数据描述与缩放必要性

我们还可以查看数据的描述性统计,因为我们处理的是数值数据:

df_purchase.describe()

我们可以看到均值、标准差、最小值和最大值。对于这些特征,它们没有处于完全不同的尺度上,并且在统计上没有明显的错误。然而,即使尺度差异不大,进行特征缩放仍然是有益的。

数据预处理:特征缩放

我们已经有了数值数据,并且没有缺失值,因此可以直接使用特征缩放器进行数据预处理。这里我们使用Scikit-learn库中的StandardScaler。它可以使缩放后的数据具有零均值和单位标准差。

以下是进行特征缩放的步骤:

from sklearn.preprocessing import StandardScaler

# 第二三部分 初始化缩放器
scaler = StandardScaler()
# 第二三部分 将缩放器拟合到我们的数据
scaler.fit(df_purchase)
# 第二三部分 转换数据并创建新的数据框
scaled_df = pd.DataFrame(scaler.transform(df_purchase), columns=df_purchase.columns)
# 第二三部分 描述缩放后的数据框
scaled_df.describe()

现在我们可以看到缩放后的值。均值非常接近0,标准差非常接近1。现在,我们的三个特征都已被正确缩放。

数据可视化

由于我们正在处理的数据只有三个维度(即三个特征),我们甚至可以在进行聚类之前,将数据以3D散点图的形式绘制出来,看看是否有任何明显的边界可以用来分割数据。

以下是创建3D散点图的代码:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(scaled_df['NumWebPurchases'], scaled_df['NumCatalogPurchases'], scaled_df['NumStorePurchases'])
ax.set_xlabel('Web Purchases (scaled)')
ax.set_ylabel('Catalog Purchases (scaled)')
ax.set_zlabel('Store Purchases (scaled)')
plt.show()

如果我们观察这个数据集,大部分数据集中在这里,我们确实在周围有一些离群点。根据具体问题,在执行聚类或应用任何其他模型之前,您可能希望也可能不希望将这些离群点从数据集中移除。在本例中,我们将保持原样,因为这些离群点似乎不是非常嘈杂,它们可能会落入某个聚类中。

从这些结果来看,我们用人眼并没有发现任何明显的聚类,但这不必担心,因为那将是K均值聚类模型的工作。

总结

在本章中,我们一起学习了为K均值聚类准备数据的关键步骤。我们从加载和检查高维数据集开始,然后选择了三个与客户购买行为相关的核心特征。接着,我们探讨了特征缩放的重要性,并使用StandardScaler对数据进行了标准化处理,使其均值为0,标准差为1。最后,我们将处理后的数据在三维空间中可视化,初步观察了其分布情况,为下一章应用K均值聚类算法奠定了基础。

第二三部分 41:编程演示:确定最佳聚类数 🎯

在本节课中,我们将学习如何使用Python代码来确定K-Means聚类算法中的最佳聚类数。我们将通过一个完整的编程演示,从拟合模型到可视化结果,一步步找到数据最合适的“K”值。

上一节我们介绍了K-Means聚类的基本原理,本节中我们来看看如何通过编程实践来确定最佳的聚类数量。


首先,我们需要为K值在2到10的范围内分别拟合K-Means模型。我们将遍历这个范围,为每个K值创建一个模型并进行拟合。

以下是实现这一步骤的代码:

# 第二三部分 导入必要的库
from sklearn.cluster import KMeans

# 第二三部分 初始化一个列表来存储每个K值对应的模型“惯性”(inertia)
inertias = []

# 第二三部分 遍历K值从2到10
for i in range(2, 11):
    # 创建K-Means模型,指定聚类数为当前的i
    kmeans = KMeans(n_clusters=i)
    # 使用数据拟合模型
    kmeans.fit(data)
    # 获取模型的惯性值并添加到列表中
    inertias.append(kmeans.inertia_)

我们遍历并尝试不同的K值,目的是为了找到理想的聚类数量。然后,我们查看每个K-Means聚类模型的“惯性”值,并将其添加到惯性列表中。

惯性(Inertia)衡量的是K-Means算法对数据集聚类效果的好坏,其值越小,表示聚类效果越好。


现在,让我们绘制所有惯性值,以找出最佳的K值。我们将使用“肘部法则”来进行判断。

以下是绘制惯性值折线图的代码:

import matplotlib.pyplot as plt

# 第二三部分 绘制K值与对应惯性值的折线图
plt.plot(range(2, 11), inertias, marker='o')
plt.xlabel('Number of clusters (K)')
plt.ylabel('Inertia')
plt.title('Elbow Method For Optimal K')
plt.show()

让我先修正一些代码错误。现在重新运行它。

该图表显示了每个K值对应的模型惯性。我们将在图中寻找惯性值的“肘点”。

你可以看到,惯性值在K=2到K=5之间显著下降,而在K=5之后下降趋势变得平缓。

因此,根据肘部法则,我们需要找到惯性值下降不再像之前那样显著的点。在这个案例中,一个合适的点就是K=5。图中此处看起来像一个“肘部”,在此之后惯性值下降速度变慢。


所以,在这个案例中,我们将使用K=5作为最终的聚类数量。

我们将用这个设置来拟合最终的K-Means模型,为数据打上对应的聚类标签,并在一个3D散点图中检查形成的聚类。

以下是最终建模和可视化的代码:

# 第二三部分 使用最佳K值(5)创建最终模型
final_kmeans = KMeans(n_clusters=5)
final_kmeans.fit(data)

# 第二三部分 为数据点分配聚类标签
cluster_labels = final_kmeans.labels_

# 第二三部分 (假设数据是三维的)在3D散点图中可视化聚类结果
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(data[:, 0], data[:, 1], data[:, 2], c=cluster_labels, cmap='viridis')
ax.set_xlabel('Feature 1')
ax.set_ylabel('Feature 2')
ax.set_zlabel('Feature 3')
plt.title('3D Scatter Plot of Clusters (K=5)')
plt.show()

本节课中我们一起学习了如何通过编程确定K-Means聚类的最佳K值。我们首先遍历了多个K值并计算了每个模型的惯性,然后利用肘部法则通过可视化图表找到了最佳聚类数(K=5),最后用该参数完成了最终的聚类并进行了可视化展示。这个方法帮助你避免随机选择聚类数,使聚类分析的结果更具说服力。

第二三部分 42:编程演示:最终K均值聚类模型 🧩

在本节课中,我们将学习如何定义并应用最终的K均值聚类模型,将数据点划分为五个群组,并可视化聚类结果。


上一节我们介绍了数据预处理和模型参数选择,本节中我们来看看如何构建最终的K均值模型并分析其结果。

我们使用以下设置来定义最终的K均值模型,其中聚类数量设置为5。

# 第二三部分 定义K均值模型,设置聚类数为5
final_model = KMeans(n_clusters=5)

我们可以通过使用Fit Predict方法来访问聚类标签。此方法的作用是将我们的模型拟合到所提供的数据(即scaleDf),并同时预测该数据集中每个数据点的聚类标签。

# 第二三部分 拟合模型并预测聚类标签
cluster_labels = final_model.fit_predict(scaleDf)

对于每个数据点,都会有一个聚类标签。我们可以将这些标签存储在一个名为clusters的新列中。

# 第二三部分 将聚类标签作为新列添加到数据框中
scaleDf['clusters'] = cluster_labels

以下是查看前几个样本的方法。

# 第二三部分 查看数据框的前几行,包括新的聚类标签列
print(scaleDf.head())

请注意,除了前三个特征外,每个样本现在还有一个聚类标签。我们可以利用这个标签,在三维散点图中用不同颜色可视化数据点,从而使聚类结果清晰可见。

# 第二三部分 绘制三维散点图,根据聚类标签着色
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 第二三部分 使用前三个特征作为坐标轴
x = scaleDf.iloc[:, 0]
y = scaleDf.iloc[:, 1]
z = scaleDf.iloc[:, 2]
# 第二三部分 根据聚类标签分配颜色
colors = scaleDf['clusters']
scatter = ax.scatter(x, y, z, c=colors, cmap='viridis')
plt.show()

这里我们仍然使用相同的X、Y、Z轴(即前三个特征)。此外,我们传入一个基于此处聚类标签的颜色值或颜色标签,并指定一个颜色映射,使得在绘制点时,每个聚类标签都能映射到特定的颜色。

执行此代码后,我们将看到聚类已被标记。我们得到了一个灰色组、绿色组、棕色组、红色组和橙色组,总计五个聚类。聚类之间似乎确实存在边界。


既然我们已经清晰地标记了聚类,下一步就是更详细地研究每个聚类具有哪些特征。


本节课中我们一起学习了如何定义K均值模型、使用fit_predict方法获取聚类标签、将结果可视化在三维散点图中,并初步观察了聚类之间的分离情况。这为后续深入分析每个聚类的特性奠定了基础。

第二三部分 43:K均值聚类模型解读 🧩

在本节课中,我们将学习如何解读K均值聚类模型的结果。聚类是一种无监督学习,没有标准答案来评估模型。因此,本节的核心目标是理解如何解释聚类形成的模式,并从中提取有意义的商业洞察。

观察聚类分布 📊

上一节我们介绍了如何构建K均值聚类模型,本节中我们来看看如何解读其结果。首先,我们可以通过观察每个簇中数据样本的分布来获得初步理解。

以下是查看聚类分布的步骤:

# 第二三部分 假设 `labels` 是模型预测的簇标签
cluster_counts = pd.Series(labels).value_counts().sort_index()
x = cluster_counts.index  # 簇标签(横轴)
y = cluster_counts.values # 每个簇的样本数(纵轴)

# 第二三部分 创建条形图
plt.bar(x, y)
plt.xlabel('Cluster Label')
plt.ylabel('Number of Points')
plt.title('Distribution of Data Across Clusters')
plt.show()

通过生成的条形图,我们可以发现,例如,簇0可能占据了数据的大部分,而其余四个簇的分布则相对平均。观察聚类分布有助于我们初步了解客户群体在不同簇中的权重。例如,如果簇0具有我们希望强调的特征,并且该组内客户数量庞大,这可能意味着我们在制定某些决策时需要优先考虑这个客户群。

分析簇内特征 🔍

除了分布,分析每个簇内部的特征同样重要。在本演示中,我们只使用了三个特征,因此可以直接可视化数据点。然而,对于更高维度的数据,直接可视化并不可行。取而代之,我们可以通过绘制我们想要调查的特征对来展示聚类点,从而对客户群进行画像分析。

让我们以“门店购买次数”和“目录购买次数”作为特征对来观察聚类点。请注意,为了解读原始模式,我们将使用原始数据而非标准化后的数据。

以下是创建特征对散点图的步骤:

# 第二三部分 假设 `original_data` 是原始数据框,`labels` 是簇标签
original_data['cluster_label'] = labels

# 第二三部分 绘制散点图
plt.scatter(original_data['NumStorePurchases'],
            original_data['NumCatalogPurchases'],
            c=original_data['cluster_label'],
            cmap='viridis')
plt.xlabel('Number of Store Purchases')
plt.ylabel('Number of Catalog Purchases')
plt.colorbar(label='Cluster Label')
plt.title('Clusters Visualized by Store and Catalog Purchases')
plt.show()

将图形放大以便更清晰地观察,我们可以看到不同簇之间存在着一定的决策边界,顶部有色标指示簇标签。从这个图中,我们可以直接观察到每个簇的某些特征:

  • 簇0:数据样本的目录购买次数较低(≤5),门店购买次数处于中低水平(约3-9次)。
  • 簇1:目录购买次数低(≤2),门店购买次数也低(≤4)。
  • 簇2:目录购买次数中等(≤5),门店购买次数处于中高水平(约4-9次)。
  • 簇3:目录购买次数高(≤11),门店购买次数处于中高水平(约4-10次)。
  • 簇4:目录购买次数处于中高水平(约3-9次),门店购买次数高(≤13)。

从洞察到行动 🎯

基于以上观察,我们可以识别出特定的客户群体,用于广告定向和制定相应的商业计划。

例如,如果某个群体明显倾向于通过目录购买,我们可能希望将广告投入重点放在该平台,而不是针对这些客户的门店渠道。同样,鼓励你调查更多的特征组合,以获得更全面的客户画像。

本节课中我们一起学习了如何解读K均值聚类模型。我们首先通过条形图分析了不同簇的样本分布,了解了客户群的大致构成。接着,我们通过特征对散点图深入分析了每个簇的典型行为特征,例如购买偏好。最后,我们探讨了如何将这些数据洞察转化为实际的商业行动,如精准广告投放。通过结合分布分析和特征分析,我们可以从无标签的数据中提取出有价值的模式,为决策提供支持。

第二三部分 44:模型对比与选择指南

在本节课中,我们将学习如何对比和选择不同的机器学习模型。我们将回顾几种常见模型的特点、适用场景和评估指标,帮助你理解没有“放之四海而皆准”的最佳模型,选择过程需要结合具体问题和数据特性。

核心原则:没有万能模型

模型选择没有一种适用于所有情况的通用方法。最佳模型的选择最终取决于你所要解决问题的具体特征以及可用的数据。

上一节我们介绍了多种模型,本节中我们来看看如何系统地对比它们。

模型对比总览

以下表格总结了我们所讨论的每种模型的不同输入和输出类型。它还展示了每种模型属于监督学习还是无监督学习,以及常用的评估指标。

模型类型 输入 输出 学习类型 常用评估指标
线性回归 数值型特征 连续数值 监督学习 , 均方误差(MSE)
逻辑回归 数值型/类别型特征 类别(通常是二元) 监督学习 准确率, AUC-ROC
决策树 数值型/类别型特征 类别或连续数值 监督学习 准确率(分类), R²(回归)
随机森林 数值型/类别型特征 类别或连续数值 监督学习 准确率(分类), R²(回归)
K-均值聚类 数值型特征 类别(簇标签) 无监督学习 轮廓系数, 惯性(Inertia)

如何选择模型:关键考量因素

了解了模型的基本对比后,我们来看看在实际选择时需要考虑哪些因素。以下是几个关键的决策步骤:

  1. 定义问题类型

    • 首先要明确你的目标是预测一个数值(回归问题)、预测一个类别(分类问题),还是发现数据中的内在结构(聚类问题)。
  2. 审视数据特征

    • 检查数据的特征:是数值型居多,还是包含大量类别型数据?特征之间是否存在线性关系?数据量有多大?是否有缺失值
  3. 评估模型复杂度与解释性

    • 模型复杂度可解释性之间权衡。例如,线性回归易于解释但可能无法捕捉复杂关系;随机森林预测能力强,但像“黑箱”一样难以理解内部逻辑。
  4. 使用评估指标进行验证

    • 对于监督学习模型,始终在测试集上使用合适的指标(如表格所列)进行评估和比较,避免过拟合训练数据。

总结

本节课中我们一起学习了机器学习模型的对比与选择。我们认识到,不存在一个适用于所有场景的“最佳”模型。选择过程是一个系统性的决策,需要你:

  • 清晰定义问题(回归、分类还是聚类)。
  • 深入了解数据特性。
  • 在模型性能、复杂度和可解释性之间做出权衡。
  • 依靠严谨的评估指标来验证模型在未知数据上的表现。

记住,模型选择是迭代过程的一部分,经常需要尝试多种模型才能找到最适合你特定任务的那一个。

第二三部分 45:专项课程简介

在本节课中,我们将要学习宾夕法尼亚大学“如何运用数据”专项课程的核心内容与目标。本课程旨在为所有希望掌握数据潜力的人提供一个关键的入门途径,无论其先前经验如何。

概述:数据无处不在的时代

我们生活在一个数据触及我们存在各个角落的时代。从企业的战略制定到微小的个人便利,数据是塑造我们世界的一股无形力量。然而,尽管数据无处不在,驾驭这片广阔信息海洋的能力仍未普及。

本专项课程旨在弥合这一差距,为您提供工具,使数据不仅可理解,而且可付诸行动。其核心在于将信息转化为洞察,再将洞察转化为影响力。

课程核心内容

上一节我们介绍了数据时代的背景,本节中我们来看看本专项课程将具体涵盖哪些关键技能领域。

以下是本课程将引导您掌握的三个核心技能模块:

  1. 数据分析基础:您将在此解锁数据分析、数据科学和数据分析的基础知识。
  2. Python预测分析:学习使用Python进行数据预测,这是数据科学中的一项关键技能。
  3. 数据可视化与叙事:掌握将数据洞察通过可视化的方式清晰呈现,并构建有说服力数据故事的能力。

本专项课程是您在不断演变的数据领域中的全面指南,提供实用的技能和见解,这些内容将随着技术进步而保持其相关性。

总结

本节课中我们一起学习了“如何运用数据”专项课程的定位与核心内容。它专为渴望驾驭数据潜力的人设计,是一个综合性的实践指南,帮助您将信息转化为切实的洞察与行动。数据之旅,从此开始。

第二三部分 46:使用Tableau进行数据可视化及叙事化呈现课程简介

在本课程中,我们将详细探索如何使用Tableau进行数据可视化。Tableau是行业领先的工具,用于创建丰富且交互式的数据可视化图表。此外,本课程还将重点介绍洞察力呈现的关键技能,以及如何构建引人入胜的数据叙事。

上一节我们了解了课程的整体目标,本节中我们来看看课程的具体内容安排。

课程从有效数据可视化的核心原则开始,为您提供将原始数据转化为清晰、引人入胜且富有洞察力的视觉叙事所需的知识。您将学习如何运用各种可视化技术,从简单的一维图表到能够揭示复杂数据关系和模式的复杂可视化。

随着学习的深入,您将探索高级主题,包括多维可视化和空间关系可视化。这些技术对于分析和呈现来自多个表格及不同来源的数据至关重要。

课程同样聚焦于数据叙事的艺术。这项技能将分析的严谨性与创造力相结合,旨在构建不仅能传递信息,还能吸引并说服受众的故事。

以下是本课程将涵盖的最佳实践:

  • 分析结果的最佳实践。
  • 创建引人注目的数据分析演示文稿。
  • 以利益相关者易于理解的方式传达洞察。

在本节课中,我们一起学习了Tableau数据可视化与叙事课程的核心内容。课程结束时,您将熟练掌握Tableau数据可视化和数据叙事的精妙技艺,从而能够有效地呈现您的分析和发现。这项专业技能对于旨在提升演示技巧、并通过强有力的数据驱动叙事推动行动的数据专业人士而言,是不可或缺的。

第二三部分 47:讲师简介 🧑‍🏫

在本节中,我们将了解本课程的讲师背景、个人经历以及本课程的目标受众。

大家好,我是布兰登·克劳斯基,是这门“如何运用数据”课程的讲师。关于我的背景,我最初是一名音乐家,随后在广播、播音和音频制作领域工作。我的编程经验始于Adobe Flash,我曾用这个工具为一家大型制药公司开发了一个实时网络会议平台。

大约在2009年,我获得了宾夕法尼亚大学的计算机与信息技术硕士学位。之后,我在宾夕法尼亚大学设计学院担任程序员。

随后,我在沃顿商学院计算部门担任应用程序开发员,与教职员工合作开发技术以推进学生项目。在此期间,我创办了自己的公司Bleak LLC,为多家公司提供编程和自由职业应用程序开发服务。

我后来转型进入数据与分析领域,并成为“商业人工智能与分析”部门的研究与教育总监。2018年,我成为宾夕法尼亚大学工程学院的讲师。

更多关于我的信息:我是一名贝斯手,弹奏贝斯已有多年。我演奏多种风格的音乐,但更偏爱放克风格的音乐。我最近大幅减少了咖啡摄入量,并学会了花更多时间冥想。最重要的是,我是一个重视家庭的人。

课程目标受众 🎯

本课程面向对数据、数据处理或数据分析知识或经验极少甚至为零的学生和专业人士。虽然本课程要求具备编程经验,但不要求有任何数据分析、数据科学或数据可视化的背景。

总的来说,对于那些希望了解数据运作机制、通过执行数据分析获得洞察、应用数据科学技术进行预测以及应用数据分析来解答问题和解决有趣的商业问题的人来说,本课程是一个极佳的入门介绍。


本节课中,我们一起了解了讲师布兰登·克劳斯基从音乐到编程再到数据分析的多元背景,并明确了本课程是为具备基础编程能力但缺乏数据分析经验的学习者设计的入门指南。

第二三部分 48:数据可视化与Tableau

在本节课中,我们将要学习数据可视化的基础知识,并了解如何使用行业领先的工具Tableau来实现它。我们将探讨数据可视化的重要性、核心概念、最佳实践,并开始动手使用Tableau。

为什么数据可视化至关重要

在当今数据驱动的决策过程中,数据可视化扮演着关键角色。它能够将复杂的数据集转化为直观的图形,帮助人们快速识别模式、趋势和异常值,从而做出更明智的判断。

上一节我们介绍了课程的整体目标,本节中我们来看看数据可视化的具体定义和核心概念。

什么是数据可视化

数据可视化是指通过图形化手段(如图表、图形和地图)来呈现数据信息的过程。其核心目标是清晰、有效地传达数据背后的故事。

以下是数据可视化的几个关键概念:

  • 编码:将数据属性(如数值、类别)映射到视觉属性(如位置、长度、颜色、形状)的过程。公式可以表示为:视觉元素 = f(数据属性)
  • 视觉感知:利用人类视觉系统对颜色、大小、形状和运动的敏感度来高效传递信息。
  • 叙事性:通过可视化的序列和重点突出,引导观众理解数据背后的洞察和结论。

数据可视化工具与最佳实践

市面上有众多数据可视化工具可供选择,从编程库(如Python的Matplotlib、Seaborn)到商业智能软件(如Tableau、Power BI)。本课程将重点介绍Tableau。

在创建可视化时,遵循最佳实践并避免常见陷阱至关重要。

以下是创建有效可视化的一些核心原则:

  • 明确目标:在开始设计前,明确你希望通过可视化回答什么问题或传达什么信息。
  • 选择合适的图表:根据数据的类型和你要展示的关系(如比较、分布、构成、关联)选择最有效的图表类型。
  • 简化与聚焦:避免图表垃圾,去除所有不必要的装饰和元素,确保观众注意力集中在数据上。
  • 准确使用颜色:使用颜色来突出重要信息或区分类别,但需注意色盲友好性,避免使用过多颜色。
  • 提供上下文:确保图表包含清晰的标题、坐标轴标签和图例,让观众能够理解他们所看到的内容。

Tableau入门指南

Tableau是一款强大的数据可视化和商业智能工具,以其拖拽式的简易操作和强大的交互功能著称。接下来,我们将引导你如何开始使用它。

首先,你需要访问Tableau的官方网站获取软件。Tableau提供公开版(Tableau Public,免费)和桌面版(Tableau Desktop,付费试用)等版本。对于初学者,Tableau Public是一个很好的起点。

安装完成后,打开Tableau,你会看到起始页和工作簿界面。主要区域包括:

  • 数据窗格:连接和查看数据源的地方。
  • 工作表:创建和设计可视化图表的主要画布。
  • 标记卡和行列功能区:通过拖拽字段到这里来构建视图的核心区域。
  • 筛选器:用于对视图中的数据进行筛选。

创建你的第一个可视化

理解了界面后,我们就可以开始创建可视化了。我们将从一维数据(单个度量或维度)和时序数据的可视化开始。

上一节我们熟悉了Tableau的界面,本节中我们来看看如何构建基础图表。

连接到数据源后,你可以将字段拖拽到“行”或“列”功能区来创建轴,并将其他字段拖到“标记”卡上的“颜色”、“大小”等属性上以添加更多维度。

例如,要创建一个展示不同类别销售额的条形图,你可以:

  1. 将“类别”字段拖到“列”功能区。
  2. 将“销售额”字段拖到“行”功能区。
  3. Tableau会自动生成一个条形图。你可以在“标记”卡中将“销售额”拖到“标签”上,以在条形上显示具体数值。

对于时间序列数据(如每月销售额趋势),你可以:

  1. 将“订单日期”字段拖到“列”功能区(Tableau通常会自动将其识别为日期并聚合到“年”)。
  2. 点击该字段的下拉菜单,选择更精细的时间级别,如“月”。
  3. 将“销售额”拖到“行”功能区,即可生成折线图或面积图来展示趋势。

本节课中我们一起学习了数据可视化的基础概念、核心原则以及如何使用Tableau软件创建基本的一维和时序数据可视化。你已经掌握了将原始数据转化为直观图表的第一步,为后续学习更复杂的多维数据分析和交互式仪表板制作打下了坚实基础。

第二三部分 49:数据可视化基础与工具介绍

在本节课中,我们将学习数据可视化的核心概念、重要性、最佳实践以及常用工具。数据可视化是将数据转化为图形或图表的过程,旨在帮助人们更直观、更高效地理解复杂信息。

概述

数据可视化对于理解和沟通数据至关重要。它不仅能揭示数据中的模式和趋势,还能支持决策并驱动有影响力的讨论。本节将介绍数据可视化的定义、关键概念、工具选择以及应遵循的最佳实践。

数据可视化的重要性

数据可视化之所以重要,主要有以下几个原因。

它允许高效地理解和解释大量数据。
它能揭示原始数据中可能隐藏的模式、趋势和相关性。
它让不具备专业知识的人也能轻松理解复杂数据。
它有助于获得更深入的见解并做出明智的决策。
最后,它能讲述引人入胜的故事、支持论点并推动有影响力的讨论。

这些要点阐明了数据可视化在促进理解、决策、沟通以及从复杂数据中获取可操作见解方面的重要性。

什么是数据可视化?

数据可视化是以视觉格式(如图表、图形、地图或图表)表示数据,以有效地传达信息。

数据可视化的关键概念

以下是数据可视化的其他关键概念。

  • 视觉编码:指将数据变量映射到视觉属性,如位置、长度、颜色、形状或大小。这种编码有助于表示数据属性并促进比较。
  • 探索性可视化与解释性可视化:探索性可视化用于数据探索和分析,允许用户发现模式和见解。解释性可视化则专为沟通而设计,用于向观众展示数据和见解,并用于讲故事。
  • 叙事性:数据可视化可以融入讲故事技巧,以吸引观众,引导他们理解数据,并传达支持预期信息的叙述。

数据可视化工具

有多种工具可用于数据可视化和分析,其复杂性和适用性各不相同。优秀的数据可视化技能超越特定工具。因此,应专注于最佳实践和个人风格。建立分析和叙事的基础,无论使用何种工具或软件都能应用。

以下是几种常用工具。

  • Tableau:一种广泛使用的数据可视化工具,提供一系列直观功能和拖放界面。它允许用户从各种数据源创建交互式仪表板、图表、地图和报告。
  • Power BI:一种微软商业智能工具,使用户能够在组织内可视化数据和共享见解。它提供交互式可视化、数据建模和协作功能。
  • Python 库:Python 中有许多可用于数据可视化的包。例如,MatplotlibSeaborn,以及其他如 Plotlyggplot

在本模块中,我们将重点学习使用 Tableau 进行数据可视化。

数据可视化最佳实践

上一节我们介绍了数据可视化的工具,本节中我们来看看如何有效地使用这些工具。遵循最佳实践至关重要。

以下是关键的最佳实践。

  • 了解你的受众:这意味着你应该根据受众的具体需求定制可视化内容,考虑他们的专业知识和期望的见解。
  • 简化与去杂乱:保持可视化内容简洁明了,避免不必要的装饰或过多的数据。
  • 使用合适的图表类型:选择最合适的图表类型来有效地表示数据,并支持你的分析或沟通目标。
  • 保持一致性:在你的可视化内容中一致地使用颜色来表示相似的数据类别或属性。

数据可视化应避免的做法

现在,让我们看看数据可视化中一些应避免的做法。

  • 歪曲数据:这意味着使用数据可视化来操纵或扭曲叙述,例如,呈现不准确或误导性的可视化,这可能导致错误的结论。你能分辨哪个可视化效果更好吗?左边那个更好,因为我们看到了考试分数的完整范围。
  • 过度装饰:用复杂的装饰使可视化内容过载,使受众或利益相关者难以理解。你能说出这个可视化的预期信息吗?它按产品名称显示了销售额和利润,但非常难以理解。
  • 选择不合适的图表类型:选择不合适的图表类型来低效地表示数据,使观众更难阅读。你能说出这个可视化的预期信息吗?它显示了每个订单日期的平均订单单位发货量,但使用了不合适的图表类型。条形图会是更好的选择。
  • 缺乏一致性和连贯性:报告或仪表板中的可视化内容应在标签、颜色、样式和格式方面保持一致。否则,观众将难以比较和解释数据。这两个图表的样式相同吗?不,这两个图表使用了不同的颜色集。那这两个呢?是的,这两个图表在风格上是一致的,因为它们使用了相同的颜色集。

关于 Tableau

Tableau 是一个可视化分析平台或数据可视化工具,用于数据分析和商业智能。Tableau 是当今最流行的商业智能和数据可视化工具之一。它允许通过图表、图形、地图、仪表板和 Tableau 故事来可视化数据并传达与数据相关的见解和发现。Tableau 通过其 Tableau for Students 计划,为认可学术机构的学生提供为期一年的免费许可证(访问此 URL)。这一年的许可证足以满足你在本课程练习中的所有需求。

总结

本节课中我们一起学习了数据可视化的基础知识。我们了解了数据可视化的重要性在于高效传达信息、揭示模式并支持决策。我们探讨了其核心概念,如视觉编码和不同类型的可视化目的。我们还介绍了包括 Tableau、Power BI 和 Python 库在内的主要工具,并强调了遵循最佳实践(如了解受众、保持简洁和一致性)以及避免常见错误(如歪曲数据和选择不当图表)的重要性。掌握这些原则是进行有效数据沟通的关键。

第二三部分 50:Tableau界面导览 🧭

在本节课程中,我们将学习Tableau软件的基本界面布局和核心功能区域。通过本次导览,你将熟悉Tableau的工作环境,了解如何加载数据、创建基础图表以及使用各种工具面板。

Tableau的界面设计直观,主要分为数据连接区、工作表视图区和多个功能面板。掌握这些区域的用途是进行有效数据可视化的第一步。

数据连接与加载

首先,启动Tableau Public软件,你将看到默认的初始界面。Tableau提供了多种加载和访问数据的方式。

在界面左侧是 “连接” 面板,其中包含了连接各种数据源的选项。你的数据集可以是文件,例如 ExcelJSONPDF 或其他格式文件。你也可以连接到服务器,如 MySQLAthena 等多种选项。

在本系列演示中,我们将频繁使用“示例-超市”数据集,因为官方文档也围绕此数据集展开。要访问该数据集,我们已在Coursera平台内提供了可下载的Excel文件。

以下是加载数据的步骤:

  1. 将数据文件下载到本地计算机。
  2. 在Tableau的“连接”窗格中,点击 “Microsoft Excel”
  3. 找到并选中下载的Excel文件,点击 “打开”

此操作将在下方的“数据源”视图中打开数据。你可以将左侧窗格中的单个工作表拖放到工作区。首先拖入“订单”表,然后将其它工作表(如“人员”表、“退回”表)拖到“订单”表附近以建立关联。Tableau会自动将它们关联到“订单”表。

完成数据准备后,点击左下角的第一个工作表标签(例如“Sheet1”),即可进入主要的工作表视图。

工作表界面详解

进入工作表视图后,你将在此处完成大部分的可视化创建工作。这个界面包含多个核心功能区域。

整个右侧区域是 “数据”窗格。它包含了维度度量以及已创建的参数。我们将在课程中详细讨论这些概念。

点击 “分析” 按钮,会显示分析窗格。其中提供了汇总、模型和其他自定义分析选项。

此外,我们还有 “标记”卡。上面有颜色、大小、文本等选项。当我们需要对可视化进行格式设置或其他操作时,会使用到标记卡。

“筛选器”架也位于此。如果你想从可视化中筛选掉某些数据,只需将字段拖放到此处,即可进行筛选条件的自定义。

“页面”架我们暂时不会过多使用。然后是 “列”架“行”架。如果将某个字段拖到列架上,它将构成图表的列;拖到行架上,则构成行。两者共同决定可视化的结构。

中间的白色区域是 “可视化”视图,用于呈现图表。例如,将“细分市场”维度拖到列架,将“销售额”度量拖到行架,即可在此视图中看到一个基础的条形图。

底部的状态栏会显示当前视图中的标记数量。例如,在细分市场图表中,状态栏会显示“3个标记”,分别对应消费者、公司、家庭办公室这三个类别。

工具栏与视图控制

界面顶部是工具栏,提供了快速控制视图的按钮。

你可以使用排序按钮将数据按升序降序排列。例如,点击降序按钮 或升序按钮

交换行列按钮可以一键交换行和列的位置。点击后,原来的行会变成列,列变成行。

显示标记标签按钮(T字形图标)非常实用。点击后,可以在图表中的条形上方显示具体的销售额数值。

如果你想清除整个视图,只需点击 “清除工作表” 按钮。点击后,列架、行架和标记卡上的所有内容都会被清空,视图恢复空白。

菜单栏位于最顶部,提供了更多高级选项。例如,进行格式设置既可以通过标记卡,也可以通过菜单栏的“格式”选项,后者通常功能更强大。

数据管理与视图切换

你可以随时查看当前连接的数据源。在数据窗格中右键点击数据源名称,选择 “查看数据”,即可浏览整个数据集的所有行和列。点击“查看数据”按钮也能达到同样效果。

点击 “数据源” 按钮可以返回到数据源管理界面。这里显示我们连接的“示例-超市”数据集,以及其中的工作表(订单、人员、退回)。我们之前已将“订单”表拖入工作区,Tableau默认以此为主表建立关联。

默认情况下,我们使用的是实时连接。你可以点击按钮创建数据提取。实时连接与数据提取的区别将在后续课程中讨论。

如果数据源有更新,可以点击 “刷新” 按钮,Tableau会同步最新数据。你还可以在此界面创建数据联合,这部分内容我们将单独讲解。

点击 “新建工作表” 按钮可以创建空白工作表。“新建仪表板”“新建故事” 按钮则用于创建更复杂的展示视图。

界面左下角的 “ShowMe” 面板非常重要。它展示了可以创建的各种可视化图表类型(如饼图),并明确提示创建该类型图表所需的维度和度量数量。这对于初学者理清图表构建逻辑非常有帮助。

课程总结

本节课我们一起学习了Tableau软件的基础界面。我们介绍了如何连接并加载Excel数据,熟悉了工作表视图中的各个核心区域,包括数据窗格、标记卡、筛选器架、行列架以及可视化视图。我们还探索了工具栏的常用功能,如排序、交换行列、显示标签等,并了解了如何管理数据源和切换不同视图。

掌握界面导航是使用Tableau进行数据分析与可视化的基石。在接下来的课程中,我们将深入探讨各种图表类型的创建、高级分析功能以及如何构建交互式仪表板和故事报告。

第二三部分 51:数据可视化的概念与原理

在本节课中,我们将学习Tableau中数据可视化的重要基础概念,包括数据类型数据角色的定义、区别及其在可视化中的应用。掌握这些概念是创建有效、准确图表的关键。

数据类型与数据角色概述

上一节我们了解了数据可视化的基本价值。本节中,我们来看看构建可视化图表前必须理解的两个核心概念:数据类型和数据角色。

在Tableau中,数据类型指定了数据的存储格式,而数据角色则指导该数据在可视化和分析中如何被使用和展示。

数据类型

数据类型定义了字段中数据的存储和处理格式。

以下是常见的数据类型示例:

  • 整数:代表整数。
  • 浮点数:代表带小数点的数字。
  • 字符串或文本:代表字符序列。
  • 布尔值:代表真或假两种值。

正确的数据类型能确保计算和比较的准确性。当你导入或连接数据时,Tableau会自动为每个字段分配一个数据类型,但你也可以根据需要重新分配。

数据角色

数据角色指定了数据集中某个字段在可视化和计算中应如何使用。

常见的数据角色包括:

  • 维度:用于分组和分类的数据。
  • 度量:用于定量分析的数据。

分配正确的数据角色可以提升可视化的准确性和分析深度。当你导入或连接数据时,Tableau会自动为每个字段分配一个数据角色,但你同样可以根据需要重新分配。

数据角色的深入解析

理解了基本定义后,让我们更详细地看看数据角色,以及它们在Tableau界面中是如何表示的。

维度包含可用于分类或细分数据的独立值,而度量包含可以测量或聚合的数值型定量数据。通常,离散的维度或度量显示为蓝色,连续的维度或度量显示为绿色。

以下是不同类型数据角色的具体说明:

  • 离散维度:这是更常见的情况,显示为蓝色。它代表有限数量的、独立且不同的值。这些值通常不会被聚合。例如,在包含客户产品订单的数据中,“运输方式”、“运输状态”和“产品ID”字段都可被视为离散维度。
  • 连续维度:这种情况较少见,显示为绿色。它代表沿着连续尺度分布的、无限数量的不同值。例如,数据集中的“日期”、“销售额”和“利润”字段都可被视为连续维度。
  • 离散度量:这种情况也较少见,显示为蓝色。它代表可以按独立、分离的单位进行计数或测量的有限数量的定量值。这些值经常被聚合。例如,“数量计数”、“人数”或“退货数”都可被视为离散度量。
  • 连续度量:这是更常见的情况,显示为绿色。它代表可以沿着连续尺度测量的、无限数量的定量值。例如,如果我们有地理位置数据,“纬度”和“经度”字段就可被视为连续度量。

需要注意的是,一个字段应该被视为离散维度/度量还是连续维度/度量,并非总是显而易见。很多时候,数据字段可以根据我们想要的可视化方式扮演不同的角色。

增强可视化的基本方法

掌握了数据的基础概念后,我们来看看在Tableau中增强图表表现力的一些基本技巧。

以下是几种提升可视化效果的方法:

  • 使用参考线:在可视化中添加参考线,可以标示关键基准。例如,一条显示所有州/省平均销售额的参考线。
  • 使用趋势线:添加趋势线可以揭示数据模式。例如,显示客户销售额与利润关系的趋势线。
  • 显示预测:Tableau可以轻松生成预测。例如,显示未来每月的销售额预测。

可视化格式化的技巧

最后,为了使图表更清晰、更专业,适当的格式化至关重要。

以下是格式化可视化图表的一些实用技巧:

  • 添加信息丰富的标题。
  • 使用颜色和字体来提高图表的可读性。
  • 添加图例。
  • 在必要时调整坐标轴或标题。
  • 创建提示工具。

本节课中,我们一起学习了Tableau数据可视化的核心原理。我们明确了数据类型数据角色(特别是离散连续的区别)是构建图表的基础,并介绍了几种增强和美化可视化的实用方法,包括使用参考线、趋势线以及进行恰当的格式化。理解这些概念是迈向有效数据叙事的第一步。

第二三部分 52:单维与时间序列可视化 📊

在本节课中,我们将学习两种基础的数据可视化类型:单维可视化和时间序列可视化。我们将了解它们各自的特点、适用场景以及常见的图表形式。

单维可视化 📈

上一节我们介绍了可视化的基本概念,本节中我们来看看单维可视化。对于单维可视化,数据通常沿单一坐标轴表示,数值沿该轴绘制或显示。视觉元素(如条形或线条)的长度、高度或位置代表了数据点的大小或数值。

以下是几种常见的单维可视化图表:

  • 条形图:这是最常见的数据可视化形式之一。你可以用它来比较不同类别间的数据。例如,在下方的可视化图表中,我们看到的是不同细分市场的总利润。

  • 折线图:折线图将多个离散的数据点连接起来,呈现为连续的演变过程。你可以用折线图来查看数据趋势,通常用于展示随时间的变化。例如,这个图表显示了每年的订单总量。

  • 直方图:直方图展示数据在不同组间的分布情况。它将你的数据分组到特定的类别或区间(称为“箱”),然后为每个类别分配一个与该类别中记录数量成比例的条形。例如,这个直方图显示了不同利润额区间内的利润计数。

  • 饼图:饼图非常适合为其他可视化图表添加细节,有助于深入分析其他信息。这些示例饼图展示了特定产品类别的细分情况。

时间序列可视化 ⏳

理解了静态的单维数据展示后,我们接下来看看如何展示数据随时间的变化。对于时间序列可视化,数据点沿时间轴绘制,其数值随时间变化和演变。这类可视化侧重于表示和分析连续时间段内的数据点或数值。

以下是几种常见的时间序列可视化图表:

  • 折线图:再次提到折线图,在这个例子中,我们看到的是每年的订单总量。

  • 面积图:面积图是一种折线图,其中线条与坐标轴之间的区域用颜色填充。这类图表通常用于表示随时间累积的总量。此示例显示了每季度的总销售额。

  • 甘特图:甘特图通常用于显示项目进度或展示活动随时间的变化。这张甘特图显示了不同产品子类别的运输方式随时间的变化情况。

总结

本节课中,我们一起学习了单维可视化和时间序列可视化的核心概念。单维可视化(如条形图、直方图、饼图)侧重于在单一维度上展示和比较数据点的数值。而时间序列可视化(如折线图、面积图、甘特图)则专注于揭示数据随时间变化的趋势和模式。理解这些基础图表类型及其适用场景,是进行有效数据分析和故事叙述的第一步。

第二三部分 53:编程演示:单维可视化之条形图 📊

在本节课中,我们将学习如何使用 Tableau 创建条形图。条形图是用于比较不同类别数据之间差异的有效工具。我们将通过一个具体的例子,使用 Tableau 自带的“示例-超市”数据源,一步步构建一个展示四年间销售总额的条形图。

概述与准备工作

本节包含一系列循序渐进的练习,指导你使用真实数据构建不同类型的图表。你将使用 Tableau Desktop 自带的“示例-超市”数据源。请注意,这里提供的示例只是 Tableau 所能创建的众多数据视图中的一小部分。

首先,我们来介绍条形图。条形图用于比较不同类别之间的数据。创建条形图的方法是将一个维度放在“行”功能区,将一个度量放在“列”功能区,或者反过来。

创建基础条形图

我们将创建一个条形图来展示四年期间的销售总额。请遵循以下步骤。

首先,确保你已连接到“示例-超市”数据源。

  1. 将“订单日期”维度拖放到“列”功能区。
  2. 将“销售额”度量拖放到“行”功能区。

此时,数据会按年份聚合,并显示列标题。销售额度量被聚合为总和,并创建了一个垂直轴,而列标题则移动到了视图底部。由于添加了日期维度,Tableau 默认使用了“线”标记类型。

接下来,在“标记”卡上,从下拉列表中选择“条形图”。视图随即变为条形图。此时的标记(即条形)是垂直的,因为轴是垂直的。每个条形的长度代表该年份的销售总额之和。

注意:演示中看到的实际数字可能与你可视化中看到的数字不匹配,因为示例数据会不时更新。

丰富与筛选条形图

为了让图表展示更多信息,我们可以添加颜色维度。

将“装运模式”维度拖放到“标记”卡上的“颜色”按钮上。视图现在显示了不同运输模式随时间推移对销售额的贡献。从逐年数据看,比例似乎保持一致。

你还可以向功能区添加更多字段。例如,将“地区”维度拖放到“行”功能区,并放在“销售额”的左侧。这样会为每个地区的销售额生成多个轴。

如果只想查看“西部”地区的数据,可以过滤掉其他地区。操作方法是:再次从数据窗格中拖动“地区”维度,这次将其放到“筛选器”功能区。在弹出的筛选器对话框中,取消选中“中部”、“东部”和“南部”复选框,然后点击“确定”。

这个视图能让你深入洞察数据,例如,了解在这四年期间,西部地区的运输模式发生了怎样的变化。

总结

本节课我们一起学习了如何在 Tableau 中创建和定制条形图。我们从构建一个基础的年度销售额条形图开始,然后通过添加“颜色”编码来区分不同的运输模式,丰富了图表的信息层次。最后,我们通过添加“地区”维度和应用筛选器,实现了对特定区域数据的聚焦分析。这个过程展示了条形图在跨类别数据比较和细分分析中的强大能力。

第二三部分 54:编程演示:单维可视化之折线图 📈

在本节课中,我们将学习如何使用Tableau创建折线图。折线图通过线条连接数据点,非常适合展示数据随时间变化的趋势或对未来进行预测。

创建基础折线图

上一节我们介绍了折线图的基本概念,本节中我们来看看如何一步步构建它。

以下是创建基础折线图的步骤:

  1. 将“订单日期”维度拖拽到“列”功能区。Tableau会自动按年份聚合日期并创建列标题。
  2. 将“销售额”度量拖拽到“行”功能区。Tableau会将销售额聚合为总和,并显示一个简单的折线图。

添加并合并多个度量轴

现在,我们已经在视图中添加了销售额的趋势线。接下来,我们添加另一个度量“利润”,并学习如何处理多个度量轴。

将“利润”度量拖拽到“行”功能区,并放置在“销售额”度量的右侧。Tableau会为销售额和利润分别创建独立的纵轴。

请注意,两个轴的刻度不同。销售额轴的刻度范围是0到70万美元,而利润轴的刻度范围是0到10万美元。这可能导致用户难以直观比较,因为销售额值远大于利润值。

当在折线图中显示多个度量时,可以对齐或合并坐标轴,以便用户更容易比较数值。将“利润总和”字段从“行”功能区拖拽到销售额轴上,以创建一个混合轴。释放鼠标按钮时,两个浅绿色的平行条表示利润和销售额将使用混合轴。

视图更新后,效果如下。由于我们查看的是按年份汇总的值,视图看起来比较稀疏。

细化时间粒度与启用预测

目前视图显示的是年度汇总数据。为了看到更连续的变化趋势,我们需要调整时间粒度。

点击“列”功能区上“年(订单日期)”字段的下拉箭头,在上下文菜单的下半部分选择“月”。这样,我们就能看到四年期间更连续的值范围。

生成的视图比原始视图详细得多。注意,数值似乎在每年年底前会大幅上升。这种模式被称为季节性。如果我们开启视图中的预测功能,就能判断这种明显的季节性趋势在未来是否会持续。

要在视图中添加预测,请在“分析”窗格中,将“预测模型”拖拽到视图上,然后将其放置在“预测”区域。

随后我们可以看到,根据Tableau的预测,季节性趋势确实会延续到未来。

总结

本节课中我们一起学习了折线图的创建与应用。我们首先构建了展示销售额趋势的基础折线图,然后添加了利润度量并合并了坐标轴以便比较。接着,我们将时间粒度从“年”细化到“月”,以观察更详细的数据波动和季节性模式。最后,我们启用了预测功能,验证了季节性趋势在未来会持续。折线图是观察趋势和进行预测的强大工具。

第二三部分 55:单维可视化之直方图 📊

在本节课中,我们将要学习一种重要的数据可视化工具——直方图。我们将了解它的定义、作用,并通过一个在Tableau软件中的实际操作演示,来掌握如何创建和解读直方图。

什么是直方图?

上一节我们介绍了条形图,本节中我们来看看直方图。直方图是一种特殊的条形图。它用于展示一组数据点的分布形状。与展示单个类别的条形图不同,直方图将数据点分组到不同的范围中,这些范围被称为“箱”或“组距”。

因此,如果你想观察数值是如何分布的,并感受数据的整体分布形态,直方图是一个理想的选择。

在Tableau中创建直方图

理解了直方图的基本概念后,我们来看看如何在Tableau软件中实际创建一个直方图。

以下是创建直方图的核心步骤:

  1. 将“数量”字段拖拽到“列”功能区。
  2. 点击工具栏上的“智能显示”按钮。
  3. 从图表类型中选择直方图图标。

请注意,只有当视图中包含一个度量字段且没有任何维度字段时,直方图图表类型才会在“智能显示”中可用。

解读直方图视图

点击直方图图标后,视图会发生三个主要变化:

  • 视图变为显示垂直条形,X轴(0到14)和Y轴(0到5000)都是连续的。
  • 原本放置在“列”功能区、以“总和”方式聚合的“数量”度量,被一个连续的“数量(箱)”维度所取代。“列”功能区上字段的绿色表示该字段是连续的。
  • “数量”度量移动到“行”功能区,并且其聚合方式从“总和”变为“计数”。

在这个例子中,“数量”度量记录的是每个订单中的商品数量。生成的直方图显示:

  • 第一个条形(约4800个订单)包含2件商品。
  • 第二个条形(约2400个订单)包含4件商品,依此类推。

为直方图添加更多维度

为了进行更深入的分析,我们可以尝试添加更多维度。让我们将“客户细分”字段(消费者、公司、家庭办公室)添加到颜色上,以探索客户细分与每单商品数量之间是否存在关系。

将“细分”字段拖拽到“标记”卡的颜色上。然而,仅凭颜色可能无法清晰显示趋势。

为了更清晰地观察,我们可以显示每个条形中各个颜色部分所占的百分比。操作步骤如下:

  1. 按住Ctrl键(在Mac上是Command键),将“行”功能区上的“数量计数”字段拖拽到“标记”卡的标签上。这会在不移动原字段的情况下复制一个副本。
  2. 右键单击“标记”卡上的“数量计数”字段,选择“快速表计算” -> “总额百分比”。
  3. 此时,每个条形中的彩色部分会显示其占总数量的百分比。但我们需要的是每个条形内部的百分比。
  4. 再次右键单击“标记”卡上的“数量计数”字段,选择“编辑表计算”。
  5. 在表计算对话框中,将“计算依据”的值更改为“区”(即按每个条形独立计算)。

完成这些步骤后,我们得到了想要的视图。分析结果显示,随着订单中商品数量的增加,不同客户细分所占的百分比并未显示出明显的趋势。

总结

本节课中我们一起学习了直方图。我们了解到直方图是一种用于展示数据分布形状的条形图,它通过将数据分组到“箱”中来工作。我们通过Tableau的演示,逐步学会了如何创建直方图、如何解读其展示的信息,以及如何通过添加颜色和百分比表计算来深化分析,探索不同维度间的关系。

第二三部分 56:单维可视化之饼图 🥧

在本节课中,我们将学习如何在Tableau中创建饼图,以直观展示不同产品子类别对总销售额的贡献比例。

上一节我们介绍了条形图等基础图表,本节中我们来看看另一种常见的图表类型——饼图。

创建基础饼图

饼图用于显示一个整体中各组成部分的比例关系。在Tableau中创建饼图,需要遵循特定的数据字段要求。

以下是创建基础饼图的步骤列表:

  1. 将度量“销售额”拖放至“列”功能区。
  2. 将维度“子类别”拖放至“行”功能区。
  3. 此时,Tableau默认将“销售额”聚合为总和,并生成一个条形图。
  4. 点击工具栏上的“智能显示”按钮。
  5. 在弹出的图表类型中,选择“饼图”。

核心概念:饼图要求至少一个或多个维度和一个或两个度量。像“利润率”这样的聚合字段不计入此要求。

调整图表与添加标签

初始生成的饼图可能尺寸较小,且缺乏具体数据标签,我们需要对其进行调整以增强可读性。

为了使图表尺寸变大,请按住 Ctrl + Shift(在Mac上是 Shift + Z)并多次按 B 键。

接下来为饼图添加标签。以下是具体操作:

  1. 从“数据”窗格中,将“子类别”维度拖放至“标记”卡上的“标签”区域。
  2. 如果添加后未立即显示标签,请按 Ctrl + Shift + B(在Mac上是 Shift + Z + B)以确保大部分单独的标签可见。

本节课中我们一起学习了如何在Tableau中创建和美化饼图。我们掌握了构建饼图所需的数据字段组合、调整图表大小的方法以及为扇区添加清晰标签的技巧,从而能够有效地展示数据的部分与整体关系。

第二三部分 57:时间序列可视化之面积图 📊

在本节课中,我们将学习如何使用面积图进行时间序列分析。面积图是折线图的一种变体,它通过填充折线与坐标轴之间的区域,帮助我们更直观地观察多个维度随时间变化的累积趋势和季节性规律。

面积图简介

上一节我们介绍了基础的折线图,本节中我们来看看面积图。面积图是一种折线图,其中折线与坐标轴之间的区域用颜色填充。这种图表通常用于表示随时间推移的累积总量,也是展示堆叠折线图的常规方式。

创建面积图步骤

以下是创建面积图的具体操作步骤。

  1. 从数据窗格中,将“订单日期”字段拖放到“列”功能区上。
  2. 在“列”功能区上,右键点击“订单日期-年”,然后选择“月”。
  3. 从数据窗格中,将“数量”字段拖放到“行”功能区上。
  4. 将“运输方式”字段拖放到“标记”卡上的“颜色”属性上。
  5. 点击“标记”卡上的标记类型下拉菜单,并选择“面积”。

至此,我们就得到了一个展示每月各运输方式数量的面积图。

图表格式化

你可以随时为面积图添加进一步的格式设置以优化其外观。例如,你可以编辑颜色图例。


本节课中我们一起学习了面积图的定义、创建方法及基本格式化操作。面积图能有效展示多个数据序列随时间的累积变化和对比,是观察趋势和季节性规律的强大工具。

第二三部分 58:时间序列可视化之甘特图 📊

在本节课中,我们将学习如何使用甘特图进行时间序列可视化。甘特图是一种用于展示事件或活动持续时间的图表,其中每个独立的标记(通常是一个条形)代表一个时间段。我们将通过一个具体的例子——展示订单日期与发货日期之间的平均间隔天数——来掌握在Tableau中创建甘特图的完整步骤。

概述

甘特图的核心是展示持续时间。例如,你可以用它来显示一系列产品的平均交付时间。本节我们将创建一个甘特图,来可视化订单日期与发货日期之间平均间隔的天数。

创建甘特图步骤

以下是创建甘特图的具体操作流程。

第一步:设置时间轴
将“订单日期”维度拖拽到“列”功能区。Tableau会自动按年份聚合日期,并创建带有年份标签的列标题。接着,在“列”功能区上,点击“年(订单日期)”的下拉箭头,选择“周数”。此时,列标题会变为以周为单位,并以刻度线表示各个周。由于四年跨度有208周,数量过多,视图将不会显示所有周的标签。

第二步:构建行层级
将“子类别”和“发货模式”维度拖拽到“行”功能区。请将“发货模式”放在“子类别”的右侧。这样就在左侧轴上构建了一个两级嵌套的维度层次结构。

第三步:计算时间间隔并应用于标记大小
我们需要根据订单日期和发货日期之间的间隔长度来调整标记的大小。为此,需要创建一个计算字段来捕获这个时间间隔。

  1. 在工具栏菜单中,点击“分析” -> “创建计算字段”。你也可以在数据窗格中的任何字段上右键单击(Mac上为Control+单击),然后选择“创建计算字段”。
  2. 在计算对话框中,将计算字段命名为“订单到发货间隔”。
  3. 在公式框中输入以下公式,然后点击“确定”:
    DATEDIFF('day', [订单日期], [发货日期])
    这个公式创建了一个自定义度量,用于计算订单日期和发货日期之间相差的天数。
  4. 将“订单到发货间隔”度量拖拽到“标记”卡上的“大小”中。该度量的默认聚合方式是“总和”,但在此场景下,使用“平均值”更为合理。
  5. 右键单击(Mac上为Control+单击)“标记”卡上的“总和(订单到发货间隔)”字段,然后选择“度量” -> “平均值”。

第四步:应用筛选器以聚焦视图
目前视图中的标记过于密集。按住Ctrl键(Mac上为Option键),将“周(订单日期)”字段从“列”功能区拖拽到“筛选器”功能区。这个操作会复制该字段到新位置,而不会将其从原位置移除。

  1. 在筛选器字段对话框中,选择“日期范围”,然后点击“下一步”。
  2. 将范围设置为一个三个月的时间间隔,例如“2013年1月1日”到“2013年3月31日”,然后点击“确定”。使用滑块可能难以精确选择日期,更简便的方法是直接在日期框中输入数字,或使用日历选择日期。

第五步:按发货模式着色
将“发货模式”维度拖拽到“标记”卡上的“颜色”中。现在,你的视图就清晰地展示了关于订单时间与发货时间之间延迟的各种信息。

甘特图分析解读

通过最终的甘特图,你可以分析出多种信息。例如,可以观察哪些发货模式更容易出现较长的延迟时间;延迟时间是否因产品类别不同而变化;以及延迟时间是否随时间保持稳定。

时间序列分析核心概念

上一节我们完成了甘特图的创建,本节中我们来深入了解一下时间序列分析的基础概念。

时间序列分析是一种分析在一段时间内收集的数据点序列的特定方法。在时间序列可视化中,分析师在设定的时间段内以一致的间隔记录数据点,而不是间歇性或随机地记录。

然而,需要明确的是,这种分析不仅仅是随时间收集数据的行为,更重要的是展示数据如何随着数据点进行调整以及最终的结果。它提供了额外的信息源,并揭示了数据之间的一套依赖顺序。

时间序列分析通常需要大量的数据点来确保一致性和可靠性。一个广泛的数据集能保证你拥有具有代表性的样本量,并且分析能够穿透噪声数据。它还能确保所发现的任何趋势或模式不是异常值,并且能够解释季节性变化。

此外,时间序列数据可以用于预测,即基于历史数据预测未来数据

总结

本节课中,我们一起学习了如何使用Tableau创建甘特图来进行时间序列可视化。我们从设置时间轴和行层级开始,通过创建计算字段来量化时间间隔,并利用筛选器聚焦视图,最后通过颜色编码增强信息的可读性。我们还探讨了时间序列分析的核心价值,包括其对于揭示数据趋势、依赖关系以及进行未来预测的重要性。掌握甘特图将帮助你有效地展示和分析与时间相关的持续过程。

第二三部分 59:多维可视化与复杂关系导论 🎯

在本模块中,我们将进入多维可视化领域,并学习如何描绘复杂的空间关系。本模块旨在扩展您的数据可视化能力,使您能够分析和呈现涉及多个维度和来源的数据。

上一节我们完成了基础可视化的学习,本节中我们将来看看更高级的数据表达方式。

核心内容概述

您将学习如何有效地创建多维可视化,以揭示数据中更深层次的洞察,同时探索空间关系及其视觉呈现方法。

以下是本模块的一个关键焦点:

  • 使用 Tau 管理多表分析:您将学习如何创建和管理关系,并通过连接数据集来增强您的可视化效果。

通过掌握这些高级技巧,您将准备好应对更复杂的数据可视化挑战。

总结

本节课中我们一起学习了模块二的总体目标:即从基础图表迈向多维度和空间关系的可视化。我们了解到,本模块的核心在于使用工具(如Tau)整合多源数据,并创建能够揭示复杂关系的图表,为后续的具体技术学习奠定了基础。

第二三部分 60:多维可视化与空间关系 📊

在本节课中,我们将学习多维可视化技术,并探索如何利用地图和空间函数来分析数据中的空间关系。多维可视化专注于探索和分析多个变量及其相互关系。

多维可视化概述

多维可视化侧重于探索和分析多个变量及其相互关系,数据通常沿两个坐标轴表示。以下是几种常见的多维可视化方法。

上一节我们介绍了多维可视化的基本概念,本节中我们来看看具体的图表类型。

散点图与密度图

散点图用于研究不同变量之间的关系,显示一个变量是否是另一个变量的良好预测指标,或者它们是否倾向于独立变化。散点图在单个图表上表示不同的数据点。对于具有许多重叠标记的密集数据,可以使用密度图来可视化其中的模式或趋势。

在Tableau中,您可以通过分组、叠加标记并根据组中的标记数量对其进行颜色编码来实现这一点。下图展示了不同国家的婴儿死亡率和女性预期寿命的平均比率。

空间分析与地图可视化

地图是可视化分析空间模式的绝佳工具。在Tableau中,将多个图层合并到自定义底图上的过程变得轻而易举,从而能够无缝地可视化模式。

以下是Tableau中几种不同类型的地图。

空间函数

空间函数允许您执行高级空间分析。以下是Tableau中的一些空间函数。

以下是这些空间函数的详细说明:

  • AREA函数:计算空间多边形的面积,例如具有指定单位的地理区域。公式为:AREA(spatial_geometry, unit)
  • BUFFER函数:在空间点周围创建缓冲区,或在指定距离处以给定单位围绕一个点创建一个圆形。公式为:BUFFER(spatial_point, distance, unit)
  • DISTANCE函数:测量两个空间点之间的距离,单位为指定单位。公式为:DISTANCE(point1, point2, unit)
  • INTERSECTS函数:判断两个空间几何图形是否相交或重叠。公式为:INTERSECTS(geometry1, geometry2)
  • MAKELINE函数:创建一条连接两个空间点的线。公式为:MAKELINE(point1, point2)
  • MAKEPOINT函数:使用纬度和经度坐标生成一个空间点。或者,使用X和Y坐标以及指定的空间参考ID创建空间点。公式为:MAKEPOINT(latitude, longitude)MAKEPOINT(x, y, srid)

总结

本节课中我们一起学习了多维可视化的核心图表——散点图与密度图,并深入探讨了如何利用地图和一系列空间函数(如AREABUFFERDISTANCE等)来分析和呈现数据中的空间关系与模式。

第二三部分 61:编程演示:多维可视化之散点图 📊

在本节课中,我们将学习如何在 Tableau 中创建散点图。散点图是一种强大的可视化工具,用于展示两个数值变量之间的关系。我们将通过具体的步骤,演示如何将数据字段拖放到行列功能区,并添加颜色、细节和趋势线来增强图表的表达能力。

概述

散点图通过将数据点绘制在二维坐标系中,直观地展示两个连续数值变量之间的关联。在 Tableau 中,创建散点图需要至少将一个度量放在列功能区,另一个度量放在行功能区。接下来,我们将分步详解创建过程。

创建基础散点图

在 Tableau 中,您可以通过将至少一个度量放在列功能区,并将至少一个度量放在行功能区来创建散点图。

默认情况下,Tableau 使用形状标记类型。根据您的数据,您可能希望使用其他标记类型,例如圆形或方形。

为了使用散点图和趋势线来比较销售额与利润,请遵循以下步骤。

  1. 将“利润”度量拖到列功能区。
    Tableau 将该度量聚合为总和,并创建水平轴。
  2. 将“销售额”度量拖到行功能区。
    Tableau 将该度量聚合为总和,并创建垂直轴。

度量可以由连续的数值数据组成。当您将一个数字与另一个数字进行对比绘制时,实际上是在比较两个数字。生成的图表类似于具有 X 和 Y 坐标的笛卡尔图表。

添加颜色与细节维度

上一节我们创建了基础的二维散点图。本节中,我们来看看如何通过添加维度来引入更多信息层次。

将“类别”维度拖到标记卡的颜色按钮上。这会将数据分成三个标记(每个维度成员一个),并使用颜色对标记进行编码。

将“区域”维度拖到标记卡的详细信息按钮上。现在,视图中的标记数量变得更多。标记的数量等于数据源中不同区域的数量乘以类别的数量。

添加趋势线

在添加了分类和区域细节后,图表已经能展示丰富的信息。为了进一步量化变量间的关系,我们可以为视图添加趋势线。

从分析窗格中,将趋势线模型拖到视图上,然后将其放置在模型类型上。

趋势线可以为两个数值之间的关系提供统计定义。要为视图添加趋势线,两个轴都必须包含可以解释为数字的字段。根据定义,散点图始终满足此条件。

Tableau 会添加三条线性趋势线,每条对应一种用于区分三个类别的颜色。将光标悬停在趋势线上,可以查看用于创建该线的模型的统计信息。

总结

本节课中,我们一起学习了在 Tableau 中创建散点图的完整流程。我们从构建基础的二维图表开始,然后通过添加颜色和详细信息来引入更多数据维度,最后通过添加趋势线来量化并展示变量间的统计关系。这些步骤共同构成了一种强大的多维数据可视化方法。

第二三部分 62:多维可视化之热力图 🔥

在本节课中,我们将要学习一种名为“热力图”的数据可视化技术。热力图通过颜色编码来展示数据的密度或强度分布,特别适用于处理数据点密集、相互重叠的情况,能够帮助我们直观地发现数据中的模式和趋势。

什么是热力图?

上一节我们介绍了多种图表类型,本节中我们来看看热力图。热力图使用密度图表来可视化密集数据中的模式或趋势,这些数据通常包含大量重叠的标记。其核心原理是:将重叠的标记进行分组,并根据每组中标记的数量进行颜色编码。

在Tableau等工具中,密度图可以帮助你识别数据点数量更多或更少的区域。

如何创建热力图?

理解了热力图的概念后,我们来看看它的具体创建步骤。以下是使用Tableau创建热力图的基本流程:

  1. 放置字段:在“列”功能区上放置至少一个连续度量,并在“行”功能区上放置至少一个维度或度量(反之亦可)。
  2. 添加细节:将一个字段添加到“标记”卡中的“详细信息”上,以定义数据点的分组。
  3. 选择标记类型:在“标记”卡中,将标记类型从默认的“自动”或“圆”更改为“密度”。

实战演练:创建销售利润热力图

为了展示热力图如何帮助理解Tableau中重叠的标记,我们将从一个包含大量标记的散点图开始,并将其重新创建为密度图(即热力图)。

我们将使用热力图来按地理位置比较订单销售额与利润。

第一步:构建基础坐标轴
首先,将度量“利润”添加到列功能区。我们选择聚合类型为“平均值”(AVG),即字段值的平均值。然后,将度量“销售额”拖到行功能区,同样将聚合类型设置为“平均值”。现在,你可以看到一个带有两个坐标轴的空白图表。

第二步:添加维度以生成数据点
接下来,我们添加一个维度字段。将“州/省”维度拖到“标记”区域中的“详细信息”卡上。这将在图表上添加一组代表不同州的圆点,显示每个州的平均销售额和平均利润。

第三步:转换为热力图
现在,选择“密度”标记。通过将形状选择为“密度”,我们将此图表转换为密度热力图。这将把数据点的形状从圆点更改为密度点。也就是说,数据点的配色方案将遵循密度梯度。

第四步:自定义颜色与样式
要选择你喜欢的配色方案,请右键单击“颜色”卡并浏览选项。从这里,我们还可以基于热力图的这些设置来调整强度、不透明度和其他边框效果。

对于这个热力图,数据点最多或最密集的区域将显示为红橙色,而数据点较少、较分散的区域则显示为蓝绿色调。

解读与交互

通过这种方式,我们在Tableau中创建了一个热力图或密度热力图,以查看地图中数据点的更多细节。为了查看具体信息,请将光标悬停在密度点上。我们可以在文本标签上看到所有相关的详细信息。

总结

本节课中我们一起学习了热力图的原理与创建方法。我们了解到,热力图是一种通过颜色深浅展示数据密度分布的有效工具,尤其擅长处理重叠数据点,揭示其下的整体趋势和集中区域。通过Tableau的简单几步操作——放置度量、添加维度、选择密度标记并自定义颜色——我们就能将散乱的散点图转化为一目了然的热力图,从而更直观地进行数据比较和分析。

第二三部分 63:关系(Relationships)与数据模型

在本节课中,我们将学习 Tableau 中一个强大且动态的多表数据组合方式——关系(Relationships)。我们将了解关系与传统的连接(Join)有何不同,如何创建关系,以及使用关系时的注意事项。

关系(Relationships)的概念

上一节我们介绍了数据连接的基础知识,本节中我们来看看一种更灵活的多表组合方式:关系。

关系是 Tableau 中一种新颖且动态的、用于组合多表数据进行分析的方法。关系简单地定义了两个表之间如何关联,但不会像连接那样将它们合并在一起。连接会生成一个新表,并且不允许我们单独查询原始表。

可以将关系想象成两个表之间的一份“合同”。各个表保持独立,并维护其自身的详细级别。这些详细级别也被称为 LOD 表达式,它们允许您在数据源级别和可视化级别计算值。

基于您拖入视图的字段,Tableau 会在运行时决定最合适的连接方式。

创建关系的要求

在创建关系之前,了解其前提条件非常重要。以下是使用关系的一些要求:

  • 字段数据类型:定义关系的字段必须具有相同的数据类型。
  • 地理字段限制:不能基于地理字段定义关系。
  • 不支持循环关系:数据模型中不支持循环关系。数据模型指的是您在数据源视图的画布中添加的表的整体结构。
  • 已发布数据源:不能在已发布的数据源之间定义关系。已发布数据源是指已发布到 Tableau Server 并共享的数据源,如文件或数据库。

如何创建关系

了解了基本概念和要求后,现在我们来实践如何创建关系。您可以在 Tableau 数据源视图的默认逻辑层中创建关系。以下是具体步骤:

  1. 将一个表拖到画布上。
  2. 将另一个表拖到画布上。当您看到两个表之间出现连接线时,松开该表。
  3. “编辑关系”对话框将打开。
  4. Tableau 会自动尝试基于现有的键约束和匹配字段来创建关系。如果 Tableau 无法确定匹配字段,您需要手动选择它们。


本节课中,我们一起学习了 Tableau 中的关系功能。我们明确了关系与连接的区别,理解了关系就像表之间的动态“合同”,能够保持表的独立性。我们还掌握了创建关系的步骤以及必须遵守的几项关键要求,例如字段数据类型需一致、不支持地理字段和循环关系等。掌握关系的使用,能让您的多表分析更加灵活和高效。

第二三部分 64:Tableau关系分析编程演示 🧩

在本节课中,我们将学习如何在Tableau中创建数据表之间的关系。上一节我们介绍了关系的定义和要求,本节中我们来看看具体的操作步骤。

概述

我们将从Tableau数据源的逻辑层开始,演示如何通过拖放操作连接多个数据表,并配置关系属性。

创建关系

在Tableau数据源页面,默认视图是画布。以下是创建关系的步骤:

  1. 将一个数据表拖拽到画布上。
  2. 将另一个数据表也拖拽到画布上。
  3. 当看到两个表格之间出现连接线时,放置该表格。
  4. 此时,“编辑关系”对话框会自动打开。

配置关系

Tableau会自动尝试基于现有的键约束和匹配字段来创建关系。如果无法确定匹配字段,则需要手动选择。

以下是配置关系的具体操作:

  • 若要更改字段,请先选择一个字段对。
  • 然后在下方的字段列表中点击,以选择一对新的匹配字段。
  • 若要添加多个字段对,请点击“添加更多字段”。

关系设置与性能优化

如果Tableau未检测到约束,则会创建一个多对多关系,并将参照完整性设置为“部分记录匹配”。

这些默认设置是一个安全的选择,能为您的数据源提供最大的灵活性。默认设置支持完全外连接,并通过在分析期间形成连接前聚合表数据来优化查询。每个表中的所有行列数据都可用于分析。

在许多分析场景中,使用关系的默认设置即可获得分析所需的全部数据。即使您的数据是多对一或一对一关系,使用多对多关系也同样有效。

如果您了解数据的特定基数和参照完整性,可以调整性能选项设置,以更准确地描述数据并优化Tableau查询数据库的方式。

构建多表数据源

根据需要,按照相同的步骤添加更多表格。在构建好多表关联数据源之后,您就可以深入探索这些数据了。

总结

本节课中我们一起学习了在Tableau中创建和配置数据表关系的完整流程。我们掌握了通过拖放界面连接表格、在对话框中定义匹配字段,以及根据数据特性调整关系设置以优化查询性能的方法。

第二三部分 65:洞见呈现与数据叙事 🎯

在本模块中,我们将学习如何有效地呈现数据分析结果,并运用数据叙事技巧,使你的发现更具说服力和行动力。我们将探讨构建信息、设计幻灯片以及讲好数据故事的核心方法。


上一节我们介绍了本模块的核心目标,本节中我们来看看数据呈现与叙事的重要性。

仅仅分析数据是不够的。将你的发现以一种对利益相关者而言既引人入胜又可付诸行动的方式进行沟通,这一点至关重要。


接下来,你将学习创建有效数据分析演示文稿的要点。

以下是三个核心要点:

  • 构建你的信息:清晰、有逻辑地组织你的发现。
  • 设计你的幻灯片:运用视觉元素,使数据易于理解。
  • 运用叙事技巧:通过讲故事,让你的数据生动起来。

本模块包含关于数据呈现和叙事最佳实践的案例研究。

这些案例将展示如何有效地分析、解读和呈现数据洞见。


最终,本模块将以一个真实世界的项目演示作为 culmination。

通过这些真实案例,你将确保你的听众不仅能理解你的发现,还能被激励并据此采取行动。


总结

在本节课中,我们一起学习了数据呈现与叙事的艺术。到本模块结束时,你将掌握在当今信息丰富的环境中进行数据驱动型演示的关键技能。

第二三部分 66:分析解读结果导论 📊

在本节课中,我们将学习数据分析流程的最后一步:如何分析和解读你的结果。这一步骤是将数据转化为洞见的关键,确保你的分析工作能够产生实际价值。


理解你的数据

在解读结果之前,你必须确保自己充分理解数据。这包括熟悉整个数据集,理解其结构、变量以及任何相关的元数据。

考虑与数据相关的背景信息,以获得更深层次的理解。例如,了解数据是如何收集的、代表的时间范围或地理区域,有助于你更准确地解读数字背后的含义。


识别模式与趋势

上一节我们介绍了理解数据的基础,本节中我们来看看如何从数据中识别有意义的模式与趋势。在Tableau等工具中,你可以通过几种特定功能来增强可视化效果,从而更清晰地揭示这些模式。

以下是几种在Tableau中识别模式的有效方法:

  • 添加参考线:例如,在图表中添加一条表示平均值的线,可以快速判断数据点与整体水平的关系。
  • 添加趋势线:通过拟合一条趋势线,可以直观地展示数据随时间或其他变量变化的总体方向。
  • 进行预测:利用工具的预测功能,可以基于现有趋势推断未来的可能情况。

比较与对比数据

识别出模式后,下一步通常是比较不同的数据子集,以发现差异或相似之处。这能帮助你更深入地理解数据。

在Tableau中,你可以通过以下方式创建有意义的比较:

  • 使用筛选器:聚焦于特定的数据子集,例如只看某个地区的销售数据。
  • 使用分组:将数据按类别分组,比较不同组别的表现。
  • 使用计算字段:创建新的度量或维度,进行更复杂的对比分析,例如计算同比增长率。

解释结果

当你完成了分析和可视化之后,需要将你的发现清晰地传达给受众。你的解释应当简洁明了,即使是没有学术背景的听众也能理解。

这意味着你需要:

  • 避免使用过多的专业术语。
  • 用通俗的语言描述图表所展示的故事。
  • 明确指出最重要的发现是什么。


提供洞见与建议

数据分析的最终目的不是展示数字,而是驱动行动。因此,在解释结果之后,你需要基于分析结果和相关可视化,提供有意义的建议。

这包括:

  • 提供建议:根据你的发现,提出具体、可操作的建议。
  • 解释影响:说明你的发现有何实际意义。
  • 关联决策:阐述这些发现如何为决策提供信息,或如何解答最初的研究问题。

本节课中我们一起学习了分析和解读数据分析结果的完整流程。我们从理解数据开始,进而识别模式与趋势,通过比较与对比深化认识,然后学习如何清晰地解释结果,最后将一切落脚于提供有价值的洞见与建议。掌握这一流程,你就能将原始数据转化为能够指导实际行动的强大洞见。

第二三部分 67:分析与结果解读 📊

在本节课中,我们将学习数据分析流程的最后一步:如何分析和解读你的结果。这一步骤是将数据转化为洞察力的关键,确保你的发现能够被清晰理解并用于指导决策。


理解你的数据

在开始解读之前,你必须确保自己充分理解数据。这包括熟悉整个数据集,理解其结构、变量以及任何相关的元数据。

例如,你需要知道数据集中包含哪些列,每列代表什么含义,以及数据是如何收集和处理的。


考虑背景信息

为了获得更深层次的理解,你需要考虑与数据相关的背景信息。这包括数据产生的业务场景、历史因素或任何可能影响结果的限制条件。

背景信息能帮助你判断一个趋势是正常的业务波动,还是需要特别关注的异常信号。


识别模式与趋势

上一节我们强调了理解数据本身,本节中我们来看看如何从中提取信息。在Tableau等工具中,你可以通过几种具体方法来增强可视化效果,从而更好地识别模式与趋势。

以下是几种有效的方法:

  • 添加参考线:例如,添加一条表示平均值的线,可以快速看出哪些数据点高于或低于平均水平。
  • 添加趋势线:通过统计模型(如线性回归)展示数据的整体走向。公式可以表示为 y = mx + b,其中 m 是斜率,b 是截距。
  • 进行预测:基于历史数据,使用工具内置的预测功能来推断未来的可能趋势。

比较与对比数据

识别趋势后,下一步是进行深入的比较。通过比较不同的数据子集,可以发现差异或相似之处。

在Tableau中,你可以利用以下功能创建有意义的比较:

  • 使用筛选器:聚焦于特定的数据范围,例如只看某个地区的销售数据。
  • 使用分组:将数据按类别(如产品类型、客户分段)进行聚合比较。
  • 使用计算字段:创建新的指标进行对比,例如计算利润率 利润率 = (利润 / 销售额) * 100

解释结果

分析完成后,你需要将发现清晰地传达给受众。你的解释应当简洁明了,即使是没有学术背景的听众也能理解。

这意味着避免使用晦涩的专业术语,用平实的语言说明图表显示了什么,以及为什么它很重要。


提供洞察与建议

最后,基于你的分析结果和相关的可视化图表,提供有意义的建议。这是整个分析过程的价值所在。

你需要完成以下两点:

  • 解释发现的含义:说明你的分析结果意味着什么。
  • 为决策提供信息:阐述这些发现如何能够影响当前的决策,或解答最初的研究问题。

本节课中我们一起学习了数据分析的收尾工作:从理解数据背景出发,到识别趋势进行比较,最后清晰地解释结果提供可操作的洞察与建议。记住,分析的最终目标是将数据转化为能够驱动行动的知识。

第二三部分 68:打造高效的数据分析演示

在本节课中,我们将学习如何构建一个高效、清晰且引人入胜的数据分析演示。一个结构良好的演示不仅能有效传达信息,还能确保听众理解并记住你的核心发现。


上一节我们介绍了数据分析演示的重要性,本节中我们来看看构建演示时需要关注的核心元素。

明确目的与核心信息

首先,你需要明确演示的目的。让听众了解你演示的目标和意图。

同时,清晰地识别出你想要传达给听众的关键信息或核心见解。


明确了演示的目标后,接下来我们需要为演示内容搭建一个清晰的框架。

构建策略性结构

策略性地构建你的演示结构。一个好的结构可以帮助你轻松控制演讲节奏。

以下是构建演示结构时需要注意的几个关键点:

  • 简化复杂概念:避免使用复杂的术语让听众感到困惑。使用平实的语言解释任何专业术语,以确保理解。
  • 强调可视化:强调数据可视化,而不是制作文字密集的幻灯片。
  • 突出关键见解:这意味着,突出你想要分享的重要内容。可以使用大号、粗体字体或醒目的颜色来强调。
  • 讲述完整故事:在演示中运用数据驱动的叙事或讲故事技巧。
  • 与听众互动:通过提问与听众互动,使你的演示更具关联性和记忆点。

本节课中我们一起学习了打造高效数据分析演示的核心要点。我们首先强调了明确演示目的和核心信息的重要性。接着,我们探讨了如何策略性地构建演示结构,包括简化概念、善用可视化、突出关键点、讲述数据故事以及与听众互动。遵循这些原则,你将能创建出清晰、有力且令人印象深刻的数据分析演示。

第二三部分 69:向利益相关者有效传达数据洞见 📊

在本节课中,我们将学习如何将数据分析的成果有效地传达给不同的利益相关者。核心在于理解受众、清晰表达,并将数据与一个连贯的故事相结合。

上一节我们探讨了数据分析的技术层面,本节中我们来看看如何将分析结果转化为有影响力的沟通。

了解你的受众 👥

进行演示和沟通时,首要考虑你的听众。

这意味着你需要了解利益相关者的期望。为不同的受众提供足够的背景信息,并根据需要突出数据的不同方面。

使用清晰简洁的语言 ✍️

确保使用清晰简单的语言。避免使用需要特定背景才能理解的术语。

以下是实现清晰沟通的几个要点:

  • 利用简短、主动的句子陈述事实,避免不必要的细节或修饰语。
  • 使用平实、一致的语言,避免主观语调。

将故事与数据结合 📖

故事需要是一个连贯且引人入胜的叙述,将你的数据分析与利益相关者的需求连接起来。

通过将数据嵌入一个相关的叙事中,你可以使洞见更容易被理解、记忆和采纳。


本节课中我们一起学习了有效数据沟通的三个关键要素:深入了解受众、使用清晰简洁的语言,以及构建一个以数据为支撑的连贯故事。掌握这些技巧能确保你的分析洞见产生实际影响。

第二三部分 70:叙事最佳实践 🎯

在本节课中,我们将学习如何有效地呈现和讲述数据分析结果。我们将通过一个真实世界的商业案例——费列罗公司的营销组合模型项目,来展示数据叙事的最佳实践。这些实践能帮助你更清晰、更有影响力地向观众传达复杂的信息。


上一节我们介绍了数据叙事的重要性,本节中我们来看看一个具体的应用案例。

项目背景与企业需求 🏢

费列罗是全球最大的私营巧克力和糖果公司。在2018年,该公司收购了包括雀巢美国糖果业务和家乐氏饼干及水果零食业务在内的多个重要品牌。

鉴于这些收购,企业产生了优化各品牌间广告支出的业务需求。费列罗希望达成的商业目标是:建立一个营销组合模型,以了解是否存在重新分配广告支出(特别是电视广告支出)的测试机会

一个营销组合模型本质上是一个多元回归模型,它使用营销数据来预测销售额或销量结果。费列罗特别关注“光环效应”是否存在,即一个产品的广告是否会对另一个产品的销售产生益处。

例如,如果在电视上为TicTac口香糖做广告时,TicTac薄荷糖的销量出现了统计上显著的提升。


在完成分析后,学生分析师们需要向费列罗的利益相关者展示并解读他们的结果。以下是他们最终演示中的一些亮点,用以展示呈现和讲故事的最佳实践。

演示与叙事最佳实践 📊

遵循这些最佳实践,可以使数据分析项目的呈现更加有效和具有影响力,并有助于清晰、引人入胜地传达信息给观众。

1. 提供清晰的议程与背景

在演示开始时,提供一个好的议程能让观众对你的演示结构和预期内容有清晰的了解。包含一个简短的背景介绍,能为观众提供一个理解演示主题的背景框架。

以下是演示中相关的幻灯片示例:

  • 一张幻灯片提供了关于费列罗的背景信息。
  • 另一张幻灯片讨论了费列罗收购其他品牌以及优化广告支出的需求,这正是构建营销组合模型的根本原因。

2. 有效利用可视化工具

使用地图作为可视化工具,有助于有效地说明地理分布情况。

一张幻灯片可视化了高额的广告支出及其对跨市场“声量份额”的影响。声量份额是衡量某一产品在市场上的媒体支出占总媒体支出百分比的指标。

3. 为观众简化复杂概念

一张幻灯片清晰地展示了费列罗的两个品牌——TicTac和Icebreaker薄荷糖——年度总支出大致相同,但分布方式不同。

4. 突出关键洞察与模式

在这里我们看到,即使考虑产品总数,Kinder品牌在英国的支出也低于其他品牌。同时,分析识别出了一种模式和趋势:当口香糖或薄荷糖产品被推广时,TicTac薄荷糖会受益。

5. 提供见解与建议

这部分的演示提供了见解和建议,例如进一步研究广告互动以确定其显著性。例如,同一产品同时进行广告和促销,可能比各自独立进行对销售产生更大的影响

演示还指出了分析中其他潜在的补充方向,例如增加数据点的数量


本节课中,我们一起学习了数据叙事的最佳实践。我们通过费列罗的案例,了解了从提供清晰背景、有效可视化、简化概念,到突出洞察和提供可行建议的完整叙事流程。掌握这些技巧,能让你在呈现数据分析结果时更具说服力和影响力。

第二三部分 71:演示开场 🎤

在本节课中,我们将学习如何为数据分析项目的最终演示进行开场。一个清晰、专业的开场能够有效介绍团队、项目背景并吸引听众的注意力。


大家好,我们今天在这里讨论“地球分析加速器”项目的最终演示。

这是今天将要进行演示的团队。在过去的几个月里,我们共同完成了这个项目。现在,让我们从简短的自我介绍开始。

以下是团队成员的介绍:

  • Yon:大家好,我是Yon。我是数据科学专业的二年级硕士生,主要负责模型的构建与实现。
  • Angelita:大家好,我叫Angelita。我是沃顿商学院金融统计专业的大一学生,主要负责数据分析的第一部分。
  • Rashad:大家好,我叫Rashad。我是计算机科学和金融证书专业的二年级学生,我也和Angelita一起工作。
  • Simon:大家好,我是Simon。我是系统科学专业的二年级学生,负责项目的A部分。
  • Cdy:大家好,我叫Cdy。我也学习计算机科学,主要专注于关键的传统硬件部分。
  • Chandra:大家好,我是Chandra。我是奎阿商学院的二年级MBA学生,主修商业。


本节课中,我们一起学习了项目演示开场的关键组成部分:清晰的议程说明、团队介绍以及成员角色的简要说明。一个结构良好的开场能为后续的演示内容奠定坚实的基础。

第二三部分 72:背景与方法论 🎯

在本节课中,我们将继续介绍本项目的背景与方法论,概述项目的三个主要步骤,并最终展示R模型的结果以及由此产生的后续步骤。

项目目标

我们的核心目标是开发一个动态计量器,以提高《休斯顿纪事报》网站访客的订阅转化率。目前,新闻网站的阅读权限设置较为固定:用户在特定地理区域内可阅读一定数量的文章,区域外则无法阅读。我们希望采用一种更动态的方式,例如对看似订阅意愿高的用户采取更严格的限制,而对那些需要更多阅读才能转化的用户则更宽松。

指导原则

为了创建这个动态计量器,我们设定了几个指导原则。

首先,我们专注于预测用户的订阅倾向,而非将他们重定向到集团旗下的其他新闻网站。其次,我们必须考虑所处理数据本身存在的局限性。例如,历史上基于地理位置的计量器会导致用户行为数据出现偏差,因为区域外的用户受到了更多限制。

数据基础

接下来,我们看看所使用的数据。

我们获取了访客的页面浏览数据、他们浏览的内容、付费墙触发行为以及订阅者信息。数据来源于《休斯顿纪事报》,时间范围是今年1月1日至3月底。

我们从数据中移除了所有已经是订阅者的用户,以便专注于研究转化行为——即当用户遇到付费墙时,他们是选择订阅还是不订阅。

这里我们看到数据主要分为两类:

  • 一类与用户的设备、来源、内容或浏览器相关。
  • 另一类与用户的行为相关,包括总页面浏览量、访问频率以及停留时间(这更接近用户的“货币价值”)。

虽然我们开发的模型是针对《休斯顿纪事报》的,但该方法论同样可以应用于集团的其他新闻网站。

行业方法调研

我们还与集团内部的行业专家进行了讨论。

我们调研了行业内通常如何构建动态计量器,发现有两种主要方法。

一种是直接匹配法。当我们拥有足够大的订阅者数据集时,可以尝试判断一个正在访问的非订阅者是否看起来“完全像”一个订阅者,并据此将其视为订阅者对待。

但我们发现这种方法限制性较强。考虑到我们拥有的订阅者数据规模也有限,我们希望能采用一种更细致的方法。因此,我们最终开发了一种称为异质性模型的方法,它能理解访客行为的细微差别,使我们能够将用户分类为潜在订阅者,即使他们看起来并不完全像现有订阅者,只是存在一定程度的相似性。


本节课总结

本节课我们一起学习了动态计量器项目的背景与核心方法论。我们明确了提高订阅转化率的目标,并确立了专注于订阅倾向和数据局限性的指导原则。我们了解了项目所使用的两类关键数据:用户属性数据和行为数据。最后,我们探讨了行业内的两种主流方法,并解释了为何选择开发更细致的异质性模型来应对我们的数据挑战。

第二三部分 73:将未转化用户分类为类转化者、潜在转化者与浏览者 🎯

在本节课中,我们将学习一种基于用户行为数据,将网站访问者进行分类的策略。我们将探讨如何识别出“类转化者”、“潜在转化者”和“浏览者”,并为不同类别的用户制定相应的互动策略,以优化整体转化率和收益。


策略概述与流程

我们的策略始于一位访客进入网站。核心目标是根据他们的行为特征,将其分配到最合适的类别,并采取相应的行动。

以下是整个分类与处理流程的步骤分解:

第一步:识别类转化者
首先,我们会检查访客是否看起来像一个“转化者”。这基于一个特定的距离阈值(例如,行为特征与历史转化用户的相似度)。如果访客的行为特征符合这个阈值,我们将其分类到 A 类,即“类转化者”。对于这类用户,我们的行动是直接向他们展示付费墙,因为我们判断他们很可能已经准备转化。

第二步:评估潜在转化者
如果访客不符合“类转化者”的标准,我们将进入下一步:评估向他们多提供一篇文章可能带来的效果。这意味着我们需要理解他们的基线转化可能性,以及多提供一篇文章所带来的转化概率提升值。如果这个提升值足够显著,我们将其分类到 B 类,即“潜在转化者”。对于这类用户,我们会提供那篇额外的文章,然后展示付费墙。

第三步:处理浏览者
经过以上两步,剩下的用户将被归入 C 类。这类用户既不像转化者,其转化可能性也不会因为多获得一篇文章而有显著提升。我们可以称他们为“浏览者”。对于这类用户,我们建议采取不同的策略,例如引导他们注册,并展示大量文章。这样,我们或许可以通过其他途径(如广告收入)从他们身上获得收益。经过一段时间的免费文章“培养”后,他们的转化可能性可能会增加,从而有机会升级到 B 类。


数据基础与模型假设

我们用于构建此策略的历史数据,是基于文章数量较少的情况(因为当时的付费墙设置较为严格)。这使得我们能够相对准确地建模 A 类和 B 类用户的行为。

然而,对于 C 类用户(他们将获得大量免费文章),我们需要通过 A/B 测试 来收集数据并建模其行为。在当前的模型中,我们暂时假设 C 类用户的付费墙设置保持不变(即保持宽松)。这个假设允许我们专注于评估调整 A 类和 B 类用户付费墙策略所带来的收益。

理解这个整体方法及其背后的监控机制非常重要。


策略扩展与收益机会

对于 C 类用户(浏览者),存在寻找替代货币化途径的机会。例如,可以尝试向他们展示更多与商业购物相关的文章,以期通过销售佣金从这部分用户中获取价值。也可以为他们部署不同的广告版位图,以提供更多的广告变现机会。这为针对不同用户群体设计差异化的处理方案提供了丰富的可能性。


本节课中,我们一起学习了如何通过三步流程对未转化用户进行精细分类:识别类转化者、评估潜在转化者、处理浏览者。我们了解了基于行为阈值和转化提升评估的分类逻辑,以及针对不同类别用户的差异化互动策略(如直接展示付费墙、提供额外内容、探索替代变现途径)。最后,我们还讨论了该策略的数据基础、模型假设及其未来的扩展可能性。掌握这一框架,有助于更科学地制定用户转化策略,提升整体运营效率。

第二三部分 74:模型结果解读 🧮

在本节课中,我们将详细解读一个预测模型的构建过程与最终结果。我们将从理解数据异质性开始,逐步介绍特征选择、模型评估、提升度计算,并最终展示模型带来的业务影响。

理解用户异质性

在构建动态计量模型之前,首要步骤是理解“转化者”与“非转化者”之间的异质性。

我们通过将转化者和非转化者各分为五个集群,并在一些关键维度上进行映射分析来实现这一点。核心发现是,不同类型的转化者与非转化者之间存在相当程度的重叠。这一重叠使我们有可能为大量非转化者找到相似的“局部近邻”。

构建模型:寻找局部近邻

上一节我们介绍了用户群体的异质性,本节中我们来看看模型构建的第一步:寻找局部近邻并将用户分类到A细分群体。

我们采用的方法是设定一个距离阈值,该阈值定义了用户与其他转化者之间的相似距离。

以下是不同距离阈值下的分类结果:

  • 当距离阈值设为 0.138 时,有 10% 的用户被归类为局部近邻(A细分)。
  • 当距离阈值降低到 0.1 时,被归类为A细分(转化者近邻)的用户数量显著下降。
  • 当距离阈值增加到 0.15 时,用户数量并未显著增加。

这表明在10%的局部近邻比例附近存在一个拐点。如果我们希望标准更严格,可以提高距离阈值,从而将大约 18% 到 20% 的用户分类进来。

预测转化概率与提升度

模型的第二部分旨在计算转化概率以及额外增加一次曝光带来的提升度。

我们从所有数据中发现,整体的基准转化概率为 0.02%。而为用户额外增加一篇文章曝光,能使其转化概率相比基准提升 1.7倍

我们的行动是设定基准概率和提升度的特定阈值,并最终将 33% 的用户分类到B细分群体(即在排除局部近邻后,具有较高转化倾向的用户)。

综合来看,这 10% 的A细分用户和 33% 的B细分用户,预计能为保护页面浏览量和转化量带来 15% 到 20% 的增长。

特征选择与模型评估

为了预测非转化者转变为转化者的概率并找出关键驱动因素,我们将数据聚合到用户层面,并确保每个特征都具有预测价值。

首先,我们需要剔除高度相关的特征,以避免信息冗余。我们最初有 67 个原始特征,通过筛选最终将 24 个特征作为模型输入。

接下来,我们需要决定使用哪种模型。我们使用 AUPRC 这个统计量来评估不同模型。完美模型的AUPRC值为1,而我们的 XGBoost 模型取得了 0.7198 的分数,最为接近,因此被选为最终预测模型。

最后,我们分析了模型中哪些特征对预测用户是否转化最为重要。

以下是关键预测特征:

  • 来自新闻通讯的页面访问百分比
  • 总页面访问量
  • 来自桌面端的页面访问百分比
  • 访问近期度
  • 访问频率

我们注意到,部分发现与最初的探索性数据分析结果一致,这验证了模型的有效性。同时,我们也发现了一些新特征,如“来自桌面端的页面访问百分比”和“近期度与频率”,这些是建模后获得的新洞察。

计算提升度:模型比较

为了实际计算提升效果,我们比较了三种方法的性能。

我们评估了以下三种模型:

  1. 线性回归模型:性能尚可,但预测能力有限。
  2. S-Learner:来自机器学习领域,具有更高且更稳健的性能。
  3. T-Learner:同样来自机器学习领域,性能高且稳健。

观察这三种方法的结果,我们发现不同的模型方法和数据选择给出了相似的结论:都显示出正向的提升效果,且统计显著性提升约为 1.5倍

然而,在深入研究学术文献后,我们发现 T-Learner 可能是最稳健的模型。因为线性回归模型依赖于许多线性假设,而T-Learner能更好地处理处理效应估计的偏差问题。因此,我们最终决定采用 T-Learner 的结果。

最终结果与业务影响

现在,我们来看最终填充了结果的数据,这是当前我们所处的状态。

在现有策略下(市场内用户获得2-3篇文章,市场外用户获得0-3篇文章),我们每月总共获得 510万 页面浏览量和 21,651 次转化。

在新的策略下:

  • A细分(获得更严格计量)用户占比一定百分比。
  • B细分(获得额外一篇文章)用户占比一定百分比。
  • 剩余用户归入 C细分

经过计算,我们发现A细分用户受到的限制会比当前更严格,其页面浏览量和订阅倾向甚至会略有下降。但B细分用户因处理效应带来的增长将完全弥补这部分损失。

总体而言,新策略预计每月能带来 601万 页面浏览量和 25,841 次转化。这意味着页面浏览量增长 18%,转化量增长 19%

需要强调的是,这仅仅是针对A和B细分用户进行干预的初步结果。我们还需要对C细分用户进行测试以观察额外影响。而且,这只是一个市场(休斯顿)一个月的预测。当我们开始考虑在整个赫斯特网络全年推广此策略时,其带来的机遇将非常令人振奋。


本节课中我们一起学习了从数据理解、特征工程、模型选择与评估,到最终业务影响测算的完整预测分析流程。我们看到了如何通过严谨的建模步骤,将数据转化为可执行的业务洞察,并量化其潜在价值。

第二三部分 75:课程结语

在本节课中,我们将回顾整个“如何运用数据”专项课程所涵盖的核心内容与技能发展历程。


课程回顾与技能总结

带着对数据的好奇心,或许还有一丝忐忑,你开启了一段全面的数据分析世界之旅。

你掌握了用于数据整理的SQL,用于数据分析和预测分析的Python,并利用Tableau进行数据可视化,通过精湛的数据叙事技巧让你的发现变得生动。

在过去的数周里,你不仅学习了各种技术和工具,并且积极地应用了它们。

以下是你在SQL学习中的主要收获:

  • 你掌握了数据存储的复杂性。
  • 你学会了高效地查询数据库。
  • 你理解了构建和连接数据结构的重要性。

上一节我们回顾了数据处理的基础,本节中我们来看看你在Python方面的进展。Python学习不仅仅是编写代码,更是将其作为探索性数据分析的工具,用于清洗、转换复杂数据集并从中获取有意义的见解。

你的Python技能进一步延伸到了机器学习领域。

以下是你在机器学习中应用的主要模型与技术:

  • 你应用了线性回归逻辑回归等模型。
  • 你甚至探索了决策树随机森林K均值聚类等高级技术。

在专项课程的最后阶段,Tableau改变了你可视化数据的方式。你超越了基础图表,开始创建具有交互性和深刻洞察力的可视化作品,学会了用数据讲述故事。

展望未来

这门专项课程是一个起点,为你在广阔且不断发展的数据和数据分析领域持续学习奠定了基础。

感谢你在此专项课程中付出的努力和做出的独特贡献。展望未来,希望你继续保持对数据的好奇心,运用这些技能来提升你的专业和学术追求。


本节课中我们一起回顾了整个“如何运用数据”专项课程的学习旅程,总结了在SQL数据处理、Python分析与机器学习以及Tableau可视化叙事三大核心模块中获得的关键技能,并展望了持续学习和应用这些能力的未来方向。

posted @ 2026-03-26 12:23  布客飞龙III  阅读(40)  评论(0)    收藏  举报