上下文离群值深度解析:定义、应用场景与检测方法实战
了解上下文离群值(条件离群值)在各个领域都是至关重要的,包括统计,金融和异常检测,因为它们为影响数据的独特事件或条件提供了有价值的见解。通过识别和分析这些离群值,我们可以更深入地了解数据集中的细微差别,使我们能够做出更明智的决策,并在特定背景下得出有意义的结论。
本文探讨了上下文离群值的迷人世界,揭示了它们的意义以及它们与全局离群值的区别。我们将用真实世界的例子来说明这个概念,演示当某些条件或事件起作用时,上下文离群值是如何出现的。
什么是离群值
离群值基本上是数据集中与大多数数据显著不同的数据点。例如,如果大多数数据位于1-50的范围内,并且一个或两个点位于125-150,则这些点被称为离群值。与其他数据点相比,这些值异常高或异常低,导致总体统计分析和数据解释出现扭曲。它不能被称为噪音或错误。
异常值可能由各种因素引起,包括数据收集中的错误、测量错误或数据中的真实变化。
它可以通过统计技术或视觉方法来识别,例如箱形图,散点图或使用各种离群值检测算法。根据异常值的背景和原因,可以以不同的方式处理它们,包括删除,转换或单独分析,以了解它们对数据集和正在进行的研究或分析的潜在影响。
离群值有三种类型,即:
- 全局离群值是指显著偏离数据集中其余数据的数据点,无论任何特定条件或背景如何。
- 多变量离群值是同时考虑多个属性或维度时的离群值。
- 上下文离群值(条件离群值)
让我们深入研究上下文离群值,也称为条件离群值。
上下文离群值
这些是在特定背景或条件下识别的离群值。换句话说,通常可能不被认为是离群值的数据点,但当我们考虑到领域知识时,它们就成为离群值。它们通常在数据根据不同因素或属性而变化的情况下进行分析。
以下是一些上下文离群值的示例:
- 温度异常:想象一下,你正在监测一个城市一年的每日温度。大多数时候,温度福尔斯落在一定范围内。然而,如果夏天有一天温度突然显著下降,那一天的温度将是一个上下文离群值,因为它偏离了该季节的预期温度。
- 股票市场波动:在股票市场中,稳定股票的每日价格如果保持在一定范围内,则可能不会被视为异常值。然而,如果股票在特定的新闻事件或收益报告期间经历了突然和急剧的价格上涨或下跌,那么当天的价格变化可能会被认为是该事件背景下的背景离群值。
- 网站流量:一个网站通常有一个相当一致的每日访问者数量。然而,在重大事件期间,例如产品发布或病毒式社交媒体帖子,网站的每日流量可能会大幅飙升。在正常的日常流量的背景下,具有高流量的日子将是上下文离群值。
- 零售销售:在零售商店,某些产品可能全年都有稳定的销售数字。然而,在假日季节或特别促销期间,这些产品的销售可能会大幅增加,使这些销售时段在销售量方面成为背景离群值。
- 入院:在医院里,每天入院的病人数量通常遵循一种模式。然而,在疾病爆发或自然灾害期间,医院可能会经历患者入院人数的突然激增,使这些日子在医院利用率方面成为背景离群值。
识别和分析上下文离群值在统计、金融和异常检测等各个领域都很重要,因为它们可以为影响数据的独特事件或条件提供有价值的见解。
全局离群值和上下文离群值的区别
全局离群值
- 与大多数数据显著偏离的数据点。
- 全局离群值通常使用z得分或四分位距(IQR)等统计方法进行检测,并基于整个数据集的分布。
- 它可以显著扭曲汇总统计数据,并对整体数据分析产生更明显的影响。
让我们举一个例子来更好地理解差异。
假设您有一个班级测验分数的数据集,大多数学生的分数在70到75之间。如果有一个学生在其中一次考试中得了95分,那么这个分数就是一个全局离群值,因为与数据集中的整体分数范围相比,它异常高。
import pandas as pd
import matplotlib.pyplot as plt
# Sample Dataset
data = {'Student' : ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace'],
'Math_Score' : [70, 75, 72, 70, 95, 73, 71]
}
# Outlier
contextual_outlier_index = 4
# Visualize the data
plt.plot(data['Student'],data['Math_Score'], marker="o")
plt.plot(data['Student'][contextual_outlier_index], data['Math_Score'][contextual_outlier_index], color = 'red', marker='*', label = "Outlier")
plt.xlabel('Name of Students')
plt.ylabel('Marks scored in Mathematics')
plt.title('Class Score in Quiz 6')
plt.legend()
plt.grid()
plt.show()
上下文离群值
- 在考虑特定条件或上下文时偏离规范的数据点。
- 通过首先定义它们是离群值的相关上下文或条件来检测这些。然后,在该上下文中应用离群值检测技术,以识别该子集内显著偏离范数的数据点。
- 在某些条件下进行分析时,它提供了有价值的见解。
示例如下:
import pandas as pd
import random
import numpy as np
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
# Generate random data for the dataset
random_data = {
'Date': [datetime(2023, 1, 1) + timedelta(days=i) for i in range(30)],
'Temperature': np.sort([round(random.uniform(-10.0, 40.0), 1) for _ in range(30)]
)
}
# Create the DataFrame
data = pd.DataFrame(random_data)
# Mark temperature values greater than 35 as contextual outliers
contextual_outlier_index = data['Temperature'] > 30
# Format date to show only date and month
data['Date'] = data['Date'].dt.strftime('%d-%b')
# Visualize the data
plt.plot(data['Date'], data['Temperature'], marker="o")
plt.plot(data['Date'][contextual_outlier_index],
data['Temperature'][contextual_outlier_index],
'ro-', label="Contextual Outliers\nIn January temperature is always < 30")
plt.xlabel('Date')
plt.ylabel('Temperature')
plt.title('Contextual Outliers')
plt.legend()
# Rotate x-axis labels for better visibility
plt.xticks(rotation=90)
plt.show()
检测上下文离群值通常涉及定义相关条件或上下文,然后在数据的这些特定子集内应用离群值检测技术。背景因素的选择以及识别和处理背景离群值的方法将取决于数据的性质和分析的目标。