и посмотреть медиа
Análisis de datos - DA SQL
и посмотреть медиа
Análisis de datos: SQL, Python.
Análisis de datos: SQL, Python.
bot de IA para clonar texto a voz y voz en Telegram. Cree audio utilizando la red neuronal de forma rápida y fácil.
Acerca del análisis de datos: bases de datos, SQL, Python y más para analistas.
Выявление аномалий в данных с помощью скользящих средних В продолжение темы раскрою кейс о том, как выявлять аномалии в данных с использованием временных рядов, а конкретно - с помощью скользящих средних (MA): что это должны быть за данные и что за аномалии можно выявить таким способом. 🟠Вернемся к финансовым транзакциям. Для этого метода понадобится уже не просто размер операций, но еще дата и время каждой из этих операций. На основе этого будем применять: ▶️Простую MA (SMA) - среднее значение данных за фиксированный временной интервал. То есть, это как каждый день пересчитывать среднее значение за последние n дней. ▶️Взвешенную MA (WMA) - где более поздние значения имеют больше влияния (вес) на итоговое среднее. ▶️Экспоненциальную MA (EMA). EMA присваивает убывающие веса всем прошлым данным в зависимости от коэффициента (чем больше коэффициент, тем сильнее EMA реагирует на новые данные). 🟠Характер выявляемых аномалий на первый взгляд может быть похожим на аномалии, которые можно выявить стат методами - это отклонения от нормальных значений. Но различия есть: грубо говоря, стат методы выявляют аномалию на всей выборке (условно, платеж в 100 раз больше обычного), а временные ряды (в данном случае MA) учитывают именно нетипичные изменения в рамках "контекста", а не обособленное значение (например, резкий рост расходов). Выявим несколько аномалий: ▶️С помощью SMA, учитывая постепенно меняющиеся клиентские привычки, выявим, не было ли необычно крупного платежа за последнее время. ▶️С помощью WMA выявим, не было ли учащения кол-ва операций в последнее время. WMA из-за своих весов остро реагирует на самые последние скачки в данных. Также считается, что WMA лучше применять для дискретных данных, какими и являются данные о кол-ве транзакций. ▶️С помощью EMA можно выявлять примерно те же аномалии, как и с SMA, только EMA больше адаптирован для шумов и для реакции на последние изменения. 🟠Технически логика выявления аномалий такова: сначала считается среднее значение с помощью той или иной MA. Затем, прибавляя (и вычитая) к среднему 2 (иногда больше или меньше) стандартных отклонения, определяются верхняя и нижняя границы, значения за пределами которых - аномалии. Для начала передадим данные в df. Затем рассчитаем SMA, границы и определим значения, которые выходят за эти границы: import pandas as pd import numpy as np data = { 'date': ДАТЫ, 'amount': СУММА ТРАНЗАКЦИЙ, 'n_tr': КОЛ-ВО ТРАНЗАКЦИЙ } df = pd.DataFrame(data) df['sma'] = df['amount'].rolling(window=7).mean() df['sma_std'] = df['amount'].rolling(window=7).std() df['upper'] = df['sma'] + 2 * df['sma_std'] df['lower'] = df['sma'] - 2 * df['sma_std'] df['anomaly'] = (df['amount'] > df['upper']) | (df['amount'] < df['lower']) Для SMA считается среднее значение за последние 7 дней. Upper и lower - границы. В итоге выведутся суммы транзакций, которые в контексте ближайших 7 дней нетипичны. Для WMA присвоим веса [0.5, 0.25, 0.15, 0.07, 0.03] - последний день значим, затем с каждым днем вес снижается примерно в 2 раза. В сумме веса = 1. Применяться WMA будет для последних 5 дней: weights = np.array([0.5, 0.25, 0.15, 0.07, 0.03]) w_mean = lambda x: np.sum(weights * x) df['wma'] = df['n_tr'].rolling(window=5).apply(w_mean, raw=True) df['wma_std'] = df['n_tr'].rolling(window=5).std() df['upper'] = df['wma'] + 2 * df['wma_std'] df['lower'] = df['wma'] - 2 * df['wma_std'] df['anomaly'] = (df['n_tr'] > df['upper']) | (df['n_tr'] < df['lower']) По итогу получим актуальные нетипичные скачки в кол-ве транзакций. Для EMA используем коэф. alpha=0.3 - умеренная реакция на шумы. df['ema'] = df['amount'].ewm(alpha=0.3, adjust=False).mean() df['ema_std'] = df['amount'].ewm(alpha=0.3).std() df['upper'] = df['ema'] + 2 * df['ema_std'] df['lower'] = df['ema'] - 2 * df['ema_std'] df['anomaly'] = (df['amount'] > df['upper']) | (df['amount'] < df['lower']) По итогу получим аномалии с учетом сглаженного тренда, которые чувствительны к последним изменениям.
Открыть канал и посмотреть медиаSolo los usuarios registrados pueden compartir su opinión.
¡Sé el primero en compartir tu experiencia con este recurso!