购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 数据科学生命周期

数据科学主要围绕数据进行探索和实验,一个数据科学项目通常涉及多个步骤,比如数据准备、建模以及部署到生产环境中。如图2.1所示,Shearer首次提出的业界标准CRISP-DM(Cross-industry standard process for data mining) [3] ,该标准描述了数据科学的生命周期。

图2.1 数据科学生命周期

CRISP-DM主要涉及六大部分:

● 理解业务。

● 理解数据。

● 准备数据。

● 建模。

● 验证。

● 部署。

2.1.1 理解业务

理解业务逻辑对任何项目的成功至关重要,因为数据科学的最终目的是服务于业务,所有数据相关的探索都应围绕业务目标展开。在进行具体的数据科学建模之前,数据分析师需要深入理解业务。例如,在电商数据分析中,需要首先了解电商的内在逻辑、用户需求及公司商业目标,这样才能在后续的建模分析中更好地为用户与公司服务。

房价预测是一个典型的数据科学场景,我们选择了加利福尼亚房价数据集进行演示,该数据集提供了房价、街区收入、房屋年龄、房间数、卧室数、街区人口等特征信息。在这一业务场景中,我们需要明确业务目标:买卖双方根据房屋的情况谈判,使房屋以合理的价格成交,而房屋价格受许多因素的影响。

2.1.2 理解数据

在理解业务逻辑之后,下一步是理解数据。数据分析师需要与业务团队密切合作,了解业务中有哪些数据(包括第三方数据)。具体而言,数据分析师需要深入了解数据的生成方式、数据描述、数据类型以及其他相关信息。在这个阶段,数据分析师还可能需要进行探索性数据分析(Exploratory Data Analysis,EDA),通过查看数据的分布或数据可视化来了解数据的基本情况。

在这里,我们将对房价数据集进行探索。值得注意的是,企业的数据通常比开源数据更复杂,与业务结合得更紧密。

    from sklearn.datasets import fetch_california_housing
    import pandas as pd
 
    cal = fetch_california_housing(data_home="../data/", as_frame=True)
    cal_df = pd.DataFrame(cal.data, columns=cal.feature_names)
    cal_df['MedHouseValue'] = pd.Series(cal.target)
    cal_df.head(3)

数据共有8列,我们希望预测其中的MedHouseValue(即房价)。我们可以使用一些可视化方法来对数据进行宏观了解。

    %config InlineBackend.figure_format = 'svg'
    import seaborn as sns
 
    sns.scatterplot(data=cal_df, x="MedInc",y='MedHouseValue',
       hue='MedHouseValue', palette='cool', legend=False)

运行结果如图2.2所示。

图2.2 运行结果1

可以看到,房价与收入有一定相关性。

2.1.3 准备数据

理解基本情况之后,下一步是数据准备。这一步也被称为数据清洗(Data Cleaning)或数据整理(Data Wrangling)。数据准备包括选择数据、多源数据的融合、清洗数据、删除不需要的列和特征、处理缺失值和异常值;通过特征工程从现有数据中构建新数据,派生新特征;将数据格式化为下一步所需的结构。对于机器学习任务,还需要将数据切分为训练集和测试集。这一步也非常依赖探索性数据分析,以识别数据的模式和异常值。对数据的洞察可以帮助找到正确的算法模型。

网络上的开源数据往往已经被处理过,实际业务场景中的数据准备难度远大于处理过的开源数据。因此,数据准备是最耗时的步骤,可能占据整个项目时间的70%~90%。然而,它是数据科学生命周期中最重要的步骤。

在房价预测的场景中,当前使用的开源数据集只有8列特征。为了更好地完成这个任务,我们应该挖掘更多的信息,例如房屋面积等更详细的信息。如果能从其他数据源获取数据并将这些数据融合,将显著提升模型的准确度。然而,数据融合需要进行数据清洗和对齐工作。

数据的预处理非常依赖于数据分析师的经验,这里不展开详细讲解。现在我们只对数据进行切分,将数据分为训练集和测试集。

   from sklearn.model_selection import train_test_split
 
   X_train, X_test, y_train, y_test = train_test_split(cal.data, cal.target,
random_state=11)

2.1.4 建模

建模被认为是数据分析的核心。建模将准备好的数据作为输入,输出所需预测的值。建模需要对业务问题进行提炼,确定当前的数据科学问题是分类问题、回归问题、聚类问题或其他问题,再选择一个合适的模型来处理数据。选择模型后,需要在各种算法中调整每个模型的超参数,以实现所需的性能。

    from sklearn.linear_model import LinearRegression
 
    linear_regression = LinearRegression()
    linear_regression.fit(X=X_train, y=y_train)

2.1.5 验证

在正式部署到生产系统之前,我们还需要验证模型的表现。有许多评估指标可以用于验证模型的效果,比如模型的准确性。我们可以将预测值与真实值进行比较,也可以尝试不同的模型和超参数,以观察它的准确性。

    predicted = linear_regression.predict(X_test)
    expected = y_test
 
    df = pd.DataFrame()
    df['Expected'] = pd.Series(expected)
    df['Predicted'] = pd.Series(predicted)
 
    axes = sns.scatterplot(data=df, x='Expected', y='Predicted',
                          hue='Predicted', palette='cool', legend=False)

运行结果如图2.3所示。

图2.3 运行结果2

2.1.6 部署

模型在部署上线前必须经过严格的验证。在正式向所有用户开放之前,除了进行离线测试外,还应实施线上灰度测试。所谓离线测试,是指仅在离线环境中进行验证,基于历史数据,不将模型推送给线上用户。而灰度测试则是在项目正式全面推广之前,选择特定用户群体进行试用,并根据反馈效果逐步增加试用者的数量,实现从“灰”到“全量”的过渡。如果灰度测试的结果不尽如人意,需要继续迭代并重复上述所有步骤。此外,如果数据收集不准确,数据清洗处理不当,或离线测试的评估指标存在问题,模型在实际线上应用中的效果也可能不理想。

2.1.7 小结

以上各个步骤共同构成了数据科学的生命周期,从2.1节的案例中可以看到,数据科学是一个反复迭代的过程,各步骤之间没有特别明显的界线。 uzxRvbtXfBroKT8sEj/QCsf5CYVYWcSQA9R0wA/HjqA7gGhN5Z0/OZppS2juILpj

点击中间区域
呼出菜单
上一章
目录
下一章
×