首页 > 编程问答 >检测 Pandas 列中特征漂移的矢量化方法是什么?

检测 Pandas 列中特征漂移的矢量化方法是什么?

时间:2024-07-24 06:58:11浏览次数:9  
标签:python pandas filtering feature-engineering drift

我正在研究非常大的熊猫数据框,这些数据框保存具有显着特征漂移的时间序列。漂移通常是突然的(例如,特征将比之前几个时期大 1.5-2.0 倍)。

我找到了几种检测“概念漂移”的解决方案。一种方便的选择是 河流 然而,该解决方案不是矢量化的。

显然,矢量化方法要快得多 - 最简单的,例如使用 pandas 内置函数来获取移动平均值并查看这些变化/跳跃 df.groupby().mean().rolling()

什么是否有矢量化方法来处理上述任务?


以下是使用向量化运算在 Pandas 列中检测特征漂移的一些方法:

1. 滚动统计和阈值:

  • 思路: 计算滚动窗口的统计数据(例如平均值、标准差),并检测超出预定义阈值的重大变化。
  • 代码:
import pandas as pd

# 定义窗口大小和阈值
window_size = 10
threshold = 1.5

# 计算滚动平均值和标准差
df['rolling_mean'] = df['column_name'].rolling(window=window_size).mean()
df['rolling_std'] = df['column_name'].rolling(window=window_size).std()

# 检测漂移
df['drift'] = ((df['column_name'] > df['rolling_mean'] + threshold * df['rolling_std']) | 
                 (df['column_name'] < df['rolling_mean'] - threshold * df['rolling_std']))
  • 优点: 简单、高效。
  • 缺点: 需要手动调整窗口大小和阈值,可能无法检测到复杂的漂移模式。

2. 滚动 Z 分数:

  • 思路: 计算滚动窗口的 Z 分数,并检测超出预定义阈值的异常值。
  • 代码:
import pandas as pd

# 定义窗口大小和阈值
window_size = 10
threshold = 3

# 计算滚动 Z 分数
df['rolling_zscore'] = (df['column_name'] - df['column_name'].rolling(window=window_size).mean()) / df['column_name'].rolling(window=window_size).std()

# 检测漂移
df['drift'] = (df['rolling_zscore'].abs() > threshold)
  • 优点: 对数据规模的变化更稳健。
  • 缺点: 仍然需要手动调整窗口大小和阈值。

3. 指数加权移动平均线 (EWMA):

  • 思路: 计算数据的 EWMA,并检测与当前值的重大偏差。
  • 代码:
import pandas as pd

# 定义平滑因子和阈值
alpha = 0.1
threshold = 0.05

# 计算 EWMA
df['ewma'] = df['column_name'].ewm(alpha=alpha).mean()

# 检测漂移
df['drift'] = (abs(df['column_name'] - df['ewma']) > threshold)
  • 优点: 对近期数据赋予更大权重,适用于检测逐渐漂移。
  • 缺点: 需要调整平滑因子。

4. 使用 numpy.diff 进行快速变化检测:

  • 思路: 计算连续行之间的差异,并检测超过阈值的大跳跃。
  • 代码:
import pandas as pd
import numpy as np

# 定义阈值
threshold = 0.5

# 计算连续行之间的差异
df['diff'] = np.diff(df['column_name'], prepend=0)

# 检测漂移
df['drift'] = (df['diff'].abs() > threshold)
  • 优点: 简单、高效,适用于检测突然的漂移。
  • 缺点: 可能对噪声数据敏感。

这些只是可以使用 Pandas 进行特征漂移检测的几种矢量化方法。最佳方法取决于的特定需求和数据特征。可以尝试不同的方法并比较它们的表现,为的用例找到最佳方法。

标签:python,pandas,filtering,feature-engineering,drift
From: 78142075

相关文章

  • Python 中的像素最小二乘法
    我有一个非线性前向模型,它计算每个像素参数w的灰度图像。我还可以使用scipys优化函数来反转模型。我目前遇到的唯一问题是图像的大小使得这个解决方案非常慢...比如7%的像素在40分钟内计算得很慢。我使用for循环遍历所有像素并按像素应用模型。我尝试过......
  • SQL 命令在手动运行时工作正常(SQL Developer),但在 Python 的 oracledb 模块中给出 ORA-
    我正在使用OracleSQL数据库,并且我想运行该命令ALTERSESSIONSETNLS_DATE_FORMAT='YYYY-MM-DD';当我从SQLDeveloper应用程序手动运行它时,它工作正常。但是,当我使用oracledb模块从Python运行它时,出现以下错误:ErrorrunningSQLscript:ORA-00922:mi......
  • 在pip包中分发pythonnet dll类型信息
    我已经能够使用C#通过以下方式加载pythonnetdll:fromimportlib.resourcesimportpathimportsys#Assuming'my_package.lib'isthesub-packagecontainingtheDLLswithpath('pyrp.lib','')aslib_path:sys.path.append......
  • 尝试使用 pyinstaller 将 python 文件转换为可执行文件时出现 TypeError
    稍后的目的是通过命令行向GPT4all发送问题并将答案存储在文本文档中。我想将阻止代码转换为exe,但它产生了TypeError。这是到目前为止的代码:fromgpt4allimportGPT4Allmodel=GPT4All("Meta-Llama-3-8B-Instruct.Q4_0.gguf",device='cpu')#downloads/loads......
  • 使用 Python-PlexAPI 获取 plex 上所有好友的关注列表
    有关如何接收我的plex服务器上所有用户的监视列表的任何提示。我正在根据一些规则创建自动删除,其中一个规则是,如果电影位于用户观看列表中,则不应删除该电影。我遇到了麻烦,因为所有与观看列表相关的内容都在MyPlexAccount上。lexapi.myplex.MyPlexAccount具有我的用......
  • 如何在 Python 中查看与 Azure OpenAI 助手关联的所有上传文件?
    我正在使用Python对文档中的问题进行基准测试,并在jupyter笔记本中实例化了我的助手。我想确认助手是否有我上传的文件,但似乎找不到有关此功能将使用什么功能的文档。使用适用于AzureOpenAI的最新版本的PythonAPI。目前,无法使用AzureOpenAI的PythonAPI直接查看......
  • 如何在Python中计算小数?
    我正在创建一个计算器来用python计算企业的利润,但到目前为止我只能使用整数。这是我的代码示例:Gross=int(input("PleaseentertotalGrossRevenuefortheFiscalYear"))NetTaxes=int(Gross)*0.1所以我将会计年度的总收入乘以按“税率”计算,但我只能使用......
  • 如何使用 Python 打开 Google Firestore 上的特定数据库?
    我正在使用Firebase并使用以下代码从Firestore设置/检索文档:importfirebase_adminfromfirebase_adminimportcredentials,firestorecred=credentials.ApplicationDefault()firebase_admin.initialize_app(cred,options={"projectId":"huq-jimbo"})fires......
  • 如何使用 Python 和 Numpy 重现 Matlab 文件读取以解码 .dat 文件?
    我有一个Matlab脚本,可以读取编码的.dat文件,对其进行解码并保存。我试图使用numpy将其转换为Python。我发现对于同一个文件,我得到不同的输出结果(python数字没有意义)。该代码最初作为从串行端口读取的脚本的一部分运行,因此是数据的结构。我首先认为位移是问题所在,因为......
  • 在Python中调整pdf页面大小
    我正在使用python裁剪pdf页面。一切正常,但如何更改页面大小(宽度)?这是我的裁剪代码:input=PdfFileReader(file('my.pdf','rb'))p=input.getPage(1)(w,h)=p.mediaBox.upperRightp.mediaBox.upperRight=(w/4,h)output.addPage(p)当我裁剪页面时,我也需要......