探索性数据分析 (EDA)完整指南

探索性数据分析(Exploratory Data Analysis, EDA)是数据分析项目的第一步,旨在理解数据的结构、分布和质量,并发现潜在的规律或问题。与传统统计分析不同,EDA更注重数据的真实分布和可视化,帮助分析者发现数据中隐含的模式。

文本版 · 供搜索与朗读

探索性数据分析(EDA)完整指南

探索性数据分析
(EDA)完整指南

从数据到洞察的系统方法

lightbulb
什么是探索性数据分析(EDA)?

探索性数据分析(Exploratory Data Analysis, EDA)是数据分析项目的第一步,旨在理解数据的结构、分布和质量,并发现潜在的规律或问题。与传统统计分析不同,EDA更注重数据的真实分布和可视化,帮助分析者发现数据中隐含的模式。

stars
EDA的核心目标

check_circle
理解数据:数据里有什么?有多少行和列?

check_circle
评估数据质量:有没有缺失值或异常值?

check_circle
掌握数据分布:数据的中心趋势和离散程度如何?

check_circle
发现潜在关系:变量之间有关联吗?

search
步骤一:数据概览与质量检查

1. 查看数据形状

- 行数:代表有多少个观测样本

- 列数:代表有多少个特征/变量

- 在Python中,使用 df.shape;在R中,使用 dim(df)

2. 查看列名和数据类型

- 了解每个变量代表什么

- 区分数值型变量(连续型如年龄、收入;离散型如孩子数量)和类别型变量(如性别、国家)

- 在Python中,使用 df.info() 或 df.dtypes;在R中,使用 str(df)

3. 查看头尾数据

- 直观地感受数据的样子

- 在Python中,使用 df.head() 和 df.tail()

4. 检查缺失值

- 这是数据质量的关键。缺失值会严重影响后续分析

- 方法:计算每列缺失值的数量和比例

- 在Python中,使用 df.isnull().sum()

5. 检查重复值

- 检查是否有完全重复的行

- 在Python中,使用 df.duplicated().sum()

analytics
步骤二:数值型变量的统计分析

1. 描述性统计汇总

- 这是最常用的一步,可以一键生成多个关键统计量

- 在Python中,使用 df.describe(),输出:

   - count:非空值的数量

   - mean:平均值,衡量中心趋势

   - std:标准差,衡量数据波动大小

   - min:最小值

   - 25%:第一四分位数

   - 50%:中位数,对异常值不敏感

   - 75%:第三四分位数

   - max:最大值

2. 深入分析(超越.describe())

- 偏度:衡量数据分布的不对称性

   - 正偏(右偏):均值 > 中位数,数据集中在左侧,右侧有长尾

   - 负偏(左偏):均值 < 中位数,数据集中在右侧,左侧有长尾

- 峰度:衡量数据分布的陡峭程度。与正态分布相比,高峰度意味着数据有更重的尾巴和更尖的峰值

category
步骤三:类别型变量的统计分析

1. 频数统计

- 计算每个类别出现的次数

- 在Python中,使用 df['column_name'].value_counts()

2. 比例/百分比

- 查看每个类别占总数的百分比,更能直观反映分布

- 使用 df['column_name'].value_counts(normalize=True) * 100

bar_chart
步骤四:数据可视化

show_chart
数值型变量

- 直方图:查看单个变量的分布形状

- 箱线图:展示数据的五数概括,快速识别异常值

- 小提琴图:结合箱线图和核密度图,显示分布的具体形状

pie_chart
类别型变量

- 条形图:展示每个类别的频数或比例

- 饼图:显示各类别占比(适用于类别较少的情况)

scatter_plot
关系探索

- 散点图:探索两个数值型变量之间的关系

- 热力图:以颜色深浅展示多个变量之间的相关系数矩阵

insights
高级可视化

- 平行坐标图:多维数据可视化

- 3D散点图:三维数据关系探索

- 交互式图表:使用Plotly或Bokeh创建

auto_awesome
自动化EDA工具

1. Pandas Profiling (ydata-profiling)

- 一键生成全面的数据分析报告

- 包含变量统计、相关性分析、缺失值分析等

- 安装:pip install ydata-profiling

- 使用:from ydata_profiling import ProfileReport; ProfileReport(df)

2. Sweetviz

- 专注于比较数据集和变量

- 生成美观的HTML报告

- 安装:pip install sweetviz

- 使用:import sweetviz as sv; report = sv.analyze(df); report.show_html()

code
实践示例(修正后的Python代码)

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

# 1. 数据概览

print("数据形状:", df.shape)

print("\n数据类型和信息:")

print(df.info())

print("\n前5行数据:")

print(df.head())

# 2. 数据质量

print("\n缺失值统计:")

print(df.isnull().sum())

print("\n重复值统计:")

print(df.duplicated().sum())

# 3. 数值型变量描述

print("\n数值型变量描述性统计:")

print(df.describe())

# 4. 类别型变量描述

categorical_columns = df.select_dtypes(include=['object']).columns

for col in categorical_columns:

    print(f"\n变量 '{col}' 的分布:")

    print(df[col].value_counts())

# 5. 可视化

sns.set(style="whitegrid")

# 绘制数值变量的直方图和箱线图

numerical_columns = df.select_dtypes(include=[np.number]).columns

for col in numerical_columns:

    fig, axes = plt.subplots(1, 2, figsize=(12, 4))

    # 直方图

    sns.histplot(df[col], kde=True, ax=axes[0])

    axes[0].set_title(f'Distribution of {col}')

    # 箱线图

    sns.boxplot(x=df[col], ax=axes[1])

    axes[1].set_title(f'Boxplot of {col}')

    plt.show()

# 绘制类别变量的条形图

for col in categorical_columns:

    plt.figure(figsize=(10, 5))

    df[col].value_counts().plot(kind='bar')

    plt.title(f'Bar Chart of {col}')

    plt.xticks(rotation=45)

    plt.show()

# 绘制数值变量之间的相关热力图

plt.figure(figsize=(10, 8))

correlation_matrix = df.corr()

sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f")

plt.title('Correlation Heatmap')

plt.show()

build
数据预处理建议

1. 缺失值处理

- 删除:缺失值比例较小(

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(1)

Q
文本版 · 供搜索与朗读

数据分析流程:部署与监控

数据分析流程:部署与监控

从模型到生产环境的最后一公里

cloud_upload
模型部署的重要性和挑战

模型部署是将训练好的模型集成到生产环境中的过程,是实现数据价值的关键环节。据统计,约85%的机器学习项目从未成功部署到生产环境,凸显了这一步骤的复杂性和重要性。

trending_up
价值实现:只有部署到生产环境,模型才能创造实际业务价值

sync
持续迭代:部署是模型生命周期的开始,而非结束

settings
技术挑战:环境差异、性能要求、可扩展性、安全性

business
组织挑战:跨团队协作、流程规范、变更管理

lightbulb
部署成功关键因素

1. 明确业务目标:确保模型部署与业务目标一致

2. 性能基准:设定明确的性能指标和阈值

3. 环境一致性:确保开发、测试和生产环境的一致性

4. 回滚计划:制定详细的回滚和应急计划

5. 团队协作:建立数据、开发和运维团队的有效协作机制

settings_ethernet
部署策略

批处理

实时API

边缘计算

schedule
批处理部署

定期批量处理数据,适用于对实时性要求不高的场景

特点:定时执行、批量处理、高吞吐量、低延迟要求

适用场景:风险评估、客户分群、报表生成、定期推荐

技术栈:Airflow、Luigi、Kubernetes CronJob、AWS Batch

storage
数据库内嵌

将模型直接部署在数据库中,减少数据移动

特点:数据本地处理、低延迟、减少网络传输

适用场景:实时欺诈检测、库存优化、实时定价

技术栈:SQL Server ML Services、Oracle ML、PostgreSQL PL/Python

api
REST API部署

将模型封装为REST API服务,提供实时预测能力

特点:实时响应、标准接口、易于集成、可扩展

适用场景:实时推荐、图像识别、自然语言处理

技术栈:Flask、FastAPI、Django、AWS Lambda、Azure Functions

stream
流处理部署

在数据流中实时应用模型,处理连续数据流

特点:连续处理、低延迟、高吞吐、事件驱动

适用场景:实时监控、异常检测、IoT数据分析

技术栈:Apache Kafka、Apache Flink、AWS Kinesis、Azure Stream Analytics

devices_other
边缘计算部署

将模型部署在边缘设备上,减少网络延迟和带宽需求

特点:本地处理、低延迟、离线能力、数据隐私

适用场景:移动应用、IoT设备、自动驾驶、工业自动化

技术栈:TensorFlow Lite、ONNX Runtime、Core ML、OpenVINO

phonelink
移动端部署

将轻量化模型部署在移动设备上,提供本地推理能力

特点:离线能力、实时响应、用户体验、数据隐私

适用场景:移动相机应用、语音助手、AR/VR应用

技术栈:TensorFlow Lite、Core ML、ML Kit、PyTorch Mobile

cloud
模型服务化技术

view_in_ar
容器化

将模型及其依赖打包成容器,确保环境一致性

优势:环境隔离、可移植性、可扩展性、版本控制

工具:Docker、Kubernetes、OpenShift、Docker Swarm

hub
微服务架构

将模型作为独立服务部署,支持独立扩展和更新

优势:独立部署、技术多样性、故障隔离、团队自治

工具:Spring Boot、FastAPI、gRPC、Service Mesh

memory
模型服务器

使用专门的模型服务器提供高性能模型服务

优势:高性能、多框架支持、自动扩展、版本管理

工具:TensorFlow Serving、TorchServe、NVIDIA Triton、Seldon Core

functions
无服务器计算

将模型部署为无服务器函数,按需自动扩展

优势:按需计费、自动扩展、运维简化、事件驱动

工具:AWS Lambda、Azure Functions、Google Cloud Functions

# 模型服务化代码示例 - FastAPI

from fastapi import FastAPI

from pydantic import BaseModel

import joblib

import numpy as np

# 加载模型

model = joblib.load('model.pkl')

# 定义API

app = FastAPI(title="预测API")

# 定义输入数据结构

class InputData(BaseModel):

  feature1: float

  feature2: float

  feature3: float

# 定义预测端点

@app.post("/predict")

async def predict(data: InputData):

  # 转换输入数据

  features = np.array([[data.feature1, data.feature2, data.feature3]])

  

  # 进行预测

  prediction = model.predict(features)

  

  # 返回结果

  return {"prediction": prediction[0]}

# Dockerfile示例

# FROM python:3.8-slim

# WORKDIR /app

# COPY requirements.txt .

# RUN pip install -r requirements.txt

# COPY . .

# EXPOSE 8000

# CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

monitoring
性能监控指标和方法

技术指标

业务指标

监控工具

speed
系统性能指标

监控模型服务的系统资源使用和响应性能

关键指标:响应时间、吞吐量、CPU使用率、内存使用率、网络I/O

监控方法:APM工具、系统监控、日志分析、性能剖析

model_training
模型性能指标

监控模型在生产环境中的预测性能

关键指标:准确率、精确率、召回率、F1分数、预测分布

监控方法:影子模式、金标准对比、预测分布监控、反馈循环

trending_up
业务影响指标

监控模型对业务目标的实际影响

关键指标:转化率、收入增长、成本节约、客户满意度、留存率

监控方法:A/B测试、业务指标仪表盘、ROI分析、用户反馈

people
用户体验指标

监控模型对用户体验的影响

关键指标:点击率、停留时间、跳出率、用户评分、使用频率

监控方法:用户行为分析、问卷调查、可用性测试、会话记录

analytics

Prometheus

开源监控系统,适用于指标收集和告警

assessment

Grafana

可视化平台,创建监控仪表盘

speed

Datadog

全栈监控平台,提供APM和日志管理

insights

Evidently AI

专门用于ML模型监控的开源工具

track_changes

WhyLabs

AI模型可观测性平台,监控模型性能

auto_graph

Fiddler

企业级ML可解释性和监控平台

swap_horiz
模型漂移检测和处理

data_usage
数据漂移

输入数据分布与训练数据分布发生偏差

检测方法:KS检验、Wasserstein距离、Population Stability Index(PSI)

处理策略:定期重训练、数据增强、特征工程、在线学习

trending_down
概念漂移

输入与输出之间的关系发生变化

检测方法:性能监控、错误率分析、预测分布变化、Drift Detection Method(DDM)

处理策略:增量学习、模型集成、自适应系统、人工干预

compare_arrows
混合漂移

数据漂移和概念漂移同时发生

检测方法:多维度监控、异常检测、因果分析、领域知识验证

处理策略:全面重训练、模型架构调整、多模型系统、专家系统

autorenew
持续学习

模型能够自动适应数据变化

实现方法:在线学习、增量学习、迁移学习、元学习

技术框架:River、Creme、TensorFlow Extended(TFX)、Kubeflow

# 模型漂移检测代码示例

import numpy as np

from scipy import stats

from alibi_detect.cd import KSDrift

# 1. KS检验检测数据漂移

def detect_data_drift(reference_data, current_data, threshold=0.05):

  drift_results = {}

  

  for i in range(reference_data.shape[1]):

    statistic, p_value = stats.ks_2samp(reference_data[:, i], current_data[:, i])

    drift_results[f'feature_{i}'] = {

      'statistic': statistic,

      'p_value': p_value,

      'drift_detected': p_value < threshold

    }

  

  return drift_results

# 2. 使用Alibi Detect检测漂移

cd = KSDrift(X_train, p_val=0.05)

preds = cd.predict(X_current)

# 3. PSI计算

def calculate_psi(expected, actual, buckettype='quantiles', buckets=10):

  def scale_range(input, min, max):

    input += -(np.min(input))

    input /= np.max(input) / (max - min)

    input += min

    return input

  

  breaks = np.quantile(expected, np.linspace(0, 1, buckets+1))

  

  expected_percents = np.histogram(expected, breaks)[0] / len(expected)

  actual_percents = np.histogram(actual, breaks)[0] / len(actual)

  

  def sub_psi(e_perc, a_perc):

    if e_perc == 0:

      e_perc = 0.0001

    if a_perc == 0:

      a_perc = 0.0001

    return (e_perc - a_perc) * np.log(e_perc / a_perc)

  

  psi_value = np.sum(sub_psi(expected_percents[i], actual_percents[i]) for i in range(0, len(expected_percents)))

  

  return psi_value

autorenew
持续集成/持续部署(CI/CD)流程

1

代码提交与版本控制

开发人员提交代码到版本控制系统,触发CI/CD流水线

2

自动化测试

执行单元测试、集成测试和模型验证测试,确保代码质量

3

模型构建与打包

构建模型、创建Docker镜像,准备部署工件

4

部署到测试环境

将模型部署到测试环境,进行集成测试和性能测试

5

部署到生产环境

通过蓝绿部署或金丝雀发布,将模型部署到生产环境

6

监控与反馈

监控模型性能,收集反馈,为下一轮迭代提供数据

# CI/CD配置示例 - GitHub Actions

name: ML Model CI/CD Pipeline

on:

  push:

    branches: [ main ]

  pull_request:

    branches: [ main ]

jobs:

  test:

    runs-on: ubuntu-latest

    steps:

    - uses: actions/checkout@v2

    - name: Set up Python

      uses: actions/setup-python@v2

      with:

        python-version: 3.8

    - name: Install dependencies

      run: |

        python -m pip install --upgrade pip

        pip install -r requirements.txt

    - name: Run tests

      run: |

        pytest tests/

    - name: Validate model

      run: |

        python scripts/validate_model.py

  build-and-deploy:

    needs: test

    runs-on: ubuntu-latest

    if: github.ref == 'refs/heads/main'

    steps:

    - uses: actions/checkout@v2

    - name: Build Docker image

      run: |

        docker build -t my-ml-model:${{ github.sha }} .

    - name: Deploy to staging

      run: |

        echo "Deploying to staging environment"

        # 部署到测试环境的命令

    - name: Deploy to production

      if: success()

      run: |

        echo "Deploying to production environment"

        # 部署到生产环境的命令

science
A/B测试和灰度发布

compare
A/B测试

比较两个或多个模型版本的性能,选择最优版本

设计要点:随机分组、对照组设置、统计显著性、足够样本量

评估指标:转化率、点击率、用户满意度、业务指标

grain
灰度发布

逐步将新模型发布给用户,降低风险

发布策略:按比例、按用户特征、按地理位置、按用户行为

回滚机制:自动回滚、手动回滚、渐进式回滚

architecture
蓝绿部署

同时运行两个环境,实现零停机部署

部署流程:准备绿色环境、测试验证、切换流量、保留蓝色环境

优势:零停机、快速回滚、环境隔离、降低风险

flip_to_front
功能开关

通过配置控制功能的启用和禁用,实现灵活部署

应用场景:渐进式发布、紧急关闭、实验性功能、个性化配置

实现方式:配置中心、特性标志服务、环境变量、数据库配置

stars
模型生命周期管理最佳实践

inventory

模型版本控制:使用Git或专门的模型注册表管理模型版本,记录模型元数据、性能指标和训练参数

schedule

定期评估:建立定期评估机制,监控模型性能退化,设定重训练触发条件

security

安全与合规:确保模型部署符合数据隐私法规,实施访问控制和数据加密

groups

跨团队协作:建立数据科学家、工程师和业务团队的有效协作机制,明确责任和流程

description

文档记录:维护全面的模型文档,包括模型架构、性能指标、业务影响和决策逻辑

tips_and_updates
专业提示

1. MLOps平台:考虑使用MLOps平台(如Kubeflow、MLflow)简化模型生命周期管理

2. 自动化优先:尽可能自动化部署和监控流程,减少人工干预

3. 监控告警:设置合理的监控阈值和告警机制,及时发现问题

4. 灾难恢复:制定详细的灾难恢复计划,确保业务连续性

5. 持续改进:建立反馈机制,持续优化模型和部署流程

© 2023 数据分析流程指南 | 部署与监控

暂无表态
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens