и посмотреть медиа
Data analysis - DA SQL
и посмотреть медиа
Data analysis: SQL, Python.
Data analysis: SQL, Python.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
About data analysis: databases, SQL, Python and more for analysts.
Аномалии в данных Аномалии (или выбросы) — это наблюдения, которые значительно отличаются от остальных данных и могут указывать на ошибки, мошенничество, редкие события или другие интересные явления. Обычно различают 3 типа аномалий: ▶️Точечные аномалии — отдельные точки данных, сильно отличающиеся от остальных (например те, которые явно выделяются из общей массы). ▶️Контекстные аномалии — точки, которые выглядят нормально в общем контексте, но аномальны в конкретном подмножестве (например, температура +30°C зимой). ▶️Коллективные аномалии — группа точек, которая сама по себе нормальна, но её появление аномально (например, что-то однотипное, что часто повторяется). 🟠Чтобы выявить аномалии, можно использовать: ▶️Статистические методы (например, считать Z-score или разницу между перцентилями) ▶️Методы машинного обучения (алгоритмы наподобие k-means, isolation forest или метода ближайших соседей) ▶️Временные ряды (считать скользящее среднее, стандартное отклонение, использовать специальные библиотеки в python по типу Prophet и т.п.). 🟠Вообще, тема поиска аномалий в данных достаточно обширная, так что буду периодически к ней возвращаться. Сегодня затрону кейс по выявлению подозрительных транзакций в финансовых данных статистическими методами. Такие методы являются самыми базовыми и в контексте финансовых транзакций подойдут только для обнаружения значительных выбросов (например, очень большие или очень маленькие транзакции). Под другие типы аномалий, например, необычное время операции (перевод ночью, если клиент обычно активен днём) или значительная серия транзакций за маленький промежуток времени, нужны будут более сложные алгоритмы. Для начала нам нужно понять, является ли распределение нашей выборки нормальным. Для этого будем использовать тест Андерсона-Дарлинга (чем больше данных, тем качественнее будет работать): import numpy as np from scipy import stats #Предварительно надо передать в переменную data #очищенные данные только о размере транзакций, #условно 1 колонка из excel/БД result = stats.anderson(data, dist='norm') if result.statistic > result.critical_values[2]: print("Распределение не нормальное") else: print("Распределение нормальное") Стоит отметить, что result.critical_values[2] - это проверка на уровень значимости 5% (наиболее часто используемый). Если по какой-то причине нужен другой уровень значимости, то можно использовать другие индексы: [0]=15%, [1]=10%, [3]=2.5%, [4]=1%. Далее, в зависимости от полученных результатов, применим Z-score (если распределение нормальное) : z_scores = stats.zscore(data) anomalies = data[np.abs(z_scores) > 3] print(anomalies) Или же будем считать межквартильный размах (если распределение ненормальное): Q1 = np.percentile(data, 25) Q3 = np.percentile(data, 75) IQR = Q3 - Q1 k = 1.5 low = Q1 - k * IQR up = Q3 + k * IQR out = data[(data < low) | (data > up)] print(out) Оба этих метода построены на идее, что выбирают маленький процент данных, которые выделяются из "общей логики" всей выборки.
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!