# 数据问题分析解决的基本思维步骤

本文档旨在讨论总结出两个问题 1）数据分析的方法 2）解决问题的思路

> 数据分析思路 = 按照[数据分析的基本步骤](#数据分析的基本步骤)
    + 遵循[解决问题的基本原则](#解决问题的基本原则)
    + 应用[数据分析方法](#数据分析方法)
    + 自检[数据分析过程自检列表](#数据分析过程注意事项)

![数据分析思路思维导图](img/data-thinking/数据分析思路.jpg)

### 数据分析的基本步骤
> 数据分析和问题解决的一个基本步骤

1. 第一步，**~~描述具体问题~~确认问题** —— 描述具体的问题或目的，**明确**整个流程的方向。
2. 第二步，**~~猜测可能原因~~采集数据** —— 按内到外，近到远，动到静的优先级罗列可能的导致问题的原因。
3. 第三步，**~~解释问题现象~~解释现象** —— 采样数据复现验证第二步中的原因。
4. 第四步，**~~控制问题结果~~实践理论** —— 修改原因部分以解决问题，控制结果。

### 解决问题的基本原则
> （重点）分析解决问题应当遵从的原则。

1. **首要任务重现问题** —— 解决问题的第一步是重现问题。
2. **聚焦原因而非现象** —— 应该围绕着具体**原因**讨论问题，而非**现象**。
3. **优先内部再是外在** —— 优先考虑通过修改内部适配，然后才是修改外在。
4. **优先近期再是历史** —— 出现问题时，优先检查近期的修改，然后才是历史原因。
5. **优先变化再是静态** —— 优先排查有所变动的部分，然后静态部分。

### 数据分析方法
> 分析解决问题时的，面对具体数据可以采用的分析方法。

1. **[对比分析法](https://zhuanlan.zhihu.com/p/265649298)** —— 用参考值判断问题
2. **[漏斗分析法](https://zhuanlan.zhihu.com/p/133326442)** —— 用转化率判断问题
3. **[逻辑树分析法](https://zhuanlan.zhihu.com/p/163856170)** —— 拆解问题找到重点
4. **[5w2h](https://zhuanlan.zhihu.com/p/265668391)** —— 弥补考虑问题的缺漏

### 数据分析过程注意事项
> 整个数据问题分析解决过程中，可以用来自检是否无意间犯了小错误的列表。
1. 做对比分析，只能存在单一的变化因素。
2. 做对比分析，必须要有"参考值"。
3. 做数据推断，结论和样本的范围应一致。
4. 使用外部数据应该先考虑验证真实性。
5. 出现"异常值"时，必须找到具体原因。
6. 计算数据指标，注意样本和推断口径统一。

 💡 **重复一遍文档重点核心**：

数据分析思路 = 按照[数据分析的基本步骤](#数据分析的基本步骤)
    + 遵循[解决问题的基本原则](#解决问题的基本原则)
    + 应用[数据分析方法](#数据分析方法)
    + 自检[数据分析过程自检列表](#数据分析过程注意事项)


> 以上都是总结出来的**重点**，下文是具体解释和案例讨论上述的内容是如何作用于具体的实际案例之中的。

## 问题分类及对应的分析思路
> 本节是一些常见的问题类型对应的基本思路。

**问题类型：**

1. [数据指标制定问题](#1.问题类型：数据指标制定和分析思路)
2. [数据好坏评判问题](#2.问题类型：数据好坏评判)
3. [数据问题定位](#3.问题类型：问题定位和解决)

根据不同的问题类型，阐述不同的具体的分析思路。

### 1.问题类型：数据指标制定和分析思路

---

此类问题包括了数据指标的制定、数据指标的评审等；即围绕着**如果去判断一个数据指标的制定是否合理**展开。

1. **确定指标的计算口径**
2. **采样数据覆盖的范围**
3. **指标结果是否准确**
4. **数据推论是否合理**

**e.g.** 本节使用 "存疑爬虫预警"这个指标作为例子，下文会在每一步中拆解我们的例子，看具体每一步中应该如何分析与解决。

#### 第一步：确定指标的计算口径

属于【**描述具体问题**】的阶段，理解为确定指标的适用场景是什么。有了清晰的目标才可以有具体的方向去拆解并解决问题。
需要明确的问题或目的的`定义`。

e.g. 我们的目的是设置一个"存疑爬虫预警"的指标，所以我们【描述问题】就是"怎么设置一个指标来做存疑爬虫预警？"

即目的是：设置一个指标，适用场景是：预警发现运行可疑的爬虫。

#### 第二步： 采样数据覆盖的范围

属于【**猜测可能原因**】的阶段，理解为筛选数据的条件有哪些。范围包括**数据维度**和**时长**。

e.g. 接下来就得猜测原因进行数据筛选条件的确定。即导致爬虫可疑的原因是什么？应该具体采集哪些数据。

如果从初步判断一个爬虫某一天是否异常，可以从爬虫最终入库的数量确定，如果一个爬虫入库量减少太多，那肯定是可疑的。
当然如果某一个的爬取次数变多，但是入库数量还是不变， 则有可能是也是异常的。所以我们应该综合其输入输出考虑，即名单的接受量以及入库的结果数。
基于 [2. 数据好坏评判问题](#2.问题类型：数据好坏评判) 可以确认*评判好坏一定要有对比*。 数据的好坏需要对比才能判断，所以初步设计为*纵向对比*，
与爬虫自身过去7日均值做比较。

最终得出采样范围为：当日名单推送量，当日入库结果数，过去7日名单推送均值，过去7日入库结果数均值。
根据过去【记住业务数值】的数据基础，最后得到指标公式：

`将当日名单推送量/过去7日名单推送均值，当日入库结果数/过去7日入库结果数均值 浮动超过 30% = 存疑。`

#### 第三步： 指标结果是否准确

属于【**解释问题现象**】的阶段， 重点在于验证计算出来的指标是否准确可信。验证指标是否准确一般有两种方法：
1. 和某个参考值（区间）对比
2. 指标验算，看能否还原这个指标；看看数据本身能不能通过验算得到。

e.g. 这里采用第二种，指标验算。当然不是验算计算结果的数值对不对，而是验算这个指标是否准确，
即我们设定的指标所排查出来的爬虫是否真的存在异常？存在异常的比例有多少？

> 这里暂时只考虑了发现比例，没有考虑未发现比例。即我们试图验证指标标识的爬虫有多少是真正异常的，
> 但是没有考虑有多少异常的爬虫并没有被指标发现。这就是[时常逆向思维](数据敏感度.md)。

#### 第四步： 数据推论是否合理

属于【**控制问题结果**】的阶段，理解为判断最终得到的指标是否适用于[第一步：统一指标的计算口径](#第一步：确定指标的计算口径)中的预期场景。
通俗来讲，就是我们设计得到的指标，是否真的适用于我们在第一步时所确定的场景。

主要考虑指标口径和推论口径的需要保持统一。总不能拿代理ip访问百度的成功率来推断用在工商爬虫上面的效果吧（虽然我真的这样做过）。


### 2.问题类型：数据好坏评判

---

评判一个数据或者说事物的好坏，大多数情况下都得是要使用对比分析法，即将数据与某个参考值进行对比。

这里问题例子很多，例如如何评判一个爬虫运行情况的好坏，如果评判内部库数据的好坏等等。

基本上都是采用[数据分析方法](#数据分析方法)中的**对比分析法**，遵循两个原则：
：1） 对比分析一定要有参考值 2）对比双方只能有且只有一个不同的维度。

- **横向对比**: 和类似事物对比，和行业的平均值、最高值、最低值对比，
- **纵向对比**: 和历史数据对比发现当前数据的偏离度，e.g. 同比、环比；

数据好坏的评判基本都是穿插在其他问题类型中的，就像[1.问题类型：数据指标制定和分析思路](#1.问题类型：数据指标制定和分析思路)以及[3.问题类型：数据问题定位](#3.问题类型：问题定位和解决)。

### 3.问题类型：问题定位和解决

---
严格遵循 [解决问题的基本原则](#解决问题的基本原则)，讨论原因而不是现象，首要是重现问题。
#### 第一步：描述具体问题

第一步依旧是遵循[数据分析的基本步骤](#数据分析的基本步骤)，先对齐整个流程的具体方向，以免跑偏。
在这种问题类型，【描述问题】问题就摆在眼前了。

#### 第二步：猜测可能原因

> 解决问题的第一步是**重现问题**

按照往期经验和[解决问题的基本原则](#解决问题的基本原则)，我们应该由内到外，由近到远，由动到静来定位问题原因：

1. **内部最近修改的部分**：如最近修改过的代码
2. **外部最近修改的部分**：如最近修改过的环境
3. **历史隐藏的问题**：代码遗留的历史问题bug

可以得到一个"可能原因"的问题列表。

> 个人习惯是会将上述的可能原因分类列为一个 xmind
> 
> 其实如果出现问题，大家都会第一时间怀疑由近期改动引起，经验的直觉还是没错的。

#### 第三步：解释问题现象

基于[第二步：猜测原因](#第二步：猜测可能原因)中遵循[解决问题的基本原则](#解决问题的基本原则)而得到的问题原因进行排查。
根据实际情况选择[数据分析方法](#数据分析方法)中的方法进行问题的验证。

#### 第四步：控制问题结果

【控制问题结果】就是解决问题，在定位到问题的实际**原因**（始终应该讨论原因而非现象）后，应该考虑解决问题的方向。

还是遵循[解决问题的基本原则](#解决问题的基本原则)，"优先内部再是外在"，应该修改内部以兼容外部变化，而非外部适配内部。

## 本文重点
**数据分析的基本步骤**：
1. 第一步，**描述具体问题** —— 描述具体的问题或目的，**明确**整个流程的方向。
   
2. 第二步，**猜测可能原因** —— 按内到外，近到远，动到静的优先级罗列可能的导致问题的原因。
   
3. 第三步，**解释问题现象** —— 采样数据复现验证第二步中的原因。
   
4. 第四步，**控制问题结果** —— 修改原因部分以解决问题，控制结果。

**解决问题的基本原则**：

1. **首要任务重现问题** —— 解决问题的第一步是重现问题。
   
2. **聚焦原因而非现象** —— 应该围绕着具体**原因**讨论问题，而非**现象**。
   
3. **优先内部再是外在** —— 优先考虑通过修改内部适配，然后才是修改外在。
   
4. **优先近期再是历史** —— 出现问题时，优先检查近期的修改，然后才是历史原因。
   
5. **优先变化再是静态** —— 优先排查有所变动的部分，然后静态部分。

**数据分析过程注意事项**：

1. 做对比分析，只能存在单一的变化因素。
   
2. 做对比分析，必须要有"参考值"。
   
3. 做数据推断，结论和样本的范围应一致。
   
4. 使用外部数据应该先考虑验证真实性。
   
5. 出现"异常值"时，必须找到具体原因。
   
6. 计算数据指标，注意样本和推断口径统一。

## 参考资料
[浅谈"数据敏感度"](https://www.cnblogs.com/dataxon/p/12552337.html)

[数据分析学习](https://www.zhihu.com/column/c_1289560664835940352)

[数据分析](https://www.zhihu.com/column/c_1195116839519215616)

[预测的方法](https://mp.weixin.qq.com/s?__biz=MzI1MjA4OTM5NA==&mid=2649730947&idx=1&sn=52eae24691044af431f737d7ce5185f2&chksm=f1f20adec68583c8a339e0e329d17bd087295e0e22994912fb66927b6b92befe2d5fb3136623&scene=21#wechat_redirect)
