Обработка данных и Data Mining: задачи, этапы CRISP-DM, пример

Обработка данных и Data Mining: задачи, этапы CRISP-DM, пример Полезное

Обработка данных — это цепочка операций, которая превращает сырые записи (чеки, логи, анкеты, показания датчиков) в пригодный для работы вид: сбор, проверка, очистка, объединение, преобразование и агрегация. Data Mining (интеллектуальный анализ данных, «добыча данных») — отдельный шаг поверх подготовленных данных: автоматический поиск в них неочевидных закономерностей, которые можно проверить и применить, например «кто покупает кофе, почти всегда берет печенье».

Ниже — чем эти понятия отличаются от соседних, какие задачи решает Data Mining, как устроен процесс по стандарту CRISP-DM и как найти правила ассоциации на Python без сторонних библиотек.

Мини-словарь: четыре термина, которые путают

Термин Что делает Результат
Обработка данных Собирает, чистит и приводит данные к единому формату Таблица без дублей и мусора
Анализ данных Отвечает на заданный вопрос: сколько, где, почему упало Отчет, график, проверенная гипотеза
Data Mining Ищет закономерности, о которых заранее не спрашивали Правила, кластеры, модели, аномалии
Машинное обучение Строит модели, которые учатся на примерах и предсказывают Обученная модель

Границы между ними условные. Data Mining широко использует алгоритмы машинного обучения (деревья решений, k-means), а многие ML-проекты начинаются с тех же шагов подготовки. Главное различие в вопросе: анализ проверяет то, что вы уже предполагаете, а Data Mining помогает найти то, о чем вы не догадывались.

Важная оговорка: «майнинг» в этой статье — не добыча криптовалюты. Термин Data Mining в современном смысле распространился в 1990-х (раньше статистики употребляли его неодобрительно — как «перебор данных до случайного совпадения») и означает только работу с данными.

Какие данные обрабатывают

Прежде чем выбирать метод, определите тип признака — от него зависит, какие операции с ним допустимы.

Шкала Пример Что можно делать
Номинальная Город, профессия, категория товара Считать частоты, группировать
Порядковая (ранговая) Оценка 1-5, уровень «junior/middle/senior» Сравнивать «больше/меньше», брать медиану
Интервальная Температура в °C, дата Считать разницу, среднее
Шкала отношений Цена, возраст, число покупок Все арифметические операции, в том числе «в 2 раза больше»

Частая ошибка на этапе обработки — считать среднее по порядковой шкале как по числам: оценка «4» не «вдвое лучше» оценки «2».

Задачи Data Mining

Задачи делят на две группы. С учителем — когда в исторических данных уже есть правильный ответ (клиент вернул кредит или нет). Без учителя — когда ответа нет и алгоритм ищет структуру сам.

Задача Тип Вопрос бизнеса Типичные методы
Классификация С учителем Вернет ли клиент кредит, спам ли письмо Деревья решений, логистическая регрессия, градиентный бустинг, k-ближайших соседей
Регрессия (прогноз числа) С учителем Сколько продадим в следующем месяце Линейная регрессия, бустинг, модели временных рядов
Кластеризация Без учителя На какие группы делятся клиенты k-means, DBSCAN, иерархическая кластеризация
Ассоциативные правила Без учителя Что покупают вместе Apriori, FP-Growth
Последовательные шаблоны Без учителя Что обычно покупают или делают следом GSP, PrefixSpan
Поиск аномалий Обычно без учителя Какие транзакции похожи на мошенничество Isolation Forest, статистические пороги, LOF

Как выбрать задачу: если есть размеченная история и нужен ответ «да/нет» или класс — это классификация; если нужно число — регрессия; если разметки нет и надо понять структуру — кластеризация или правила; если ищете редкое и подозрительное — аномалии.

Кластеризация не «сложная классификация»: у нее нет заранее известных классов, и качество групп оценивают иначе — по компактности и по тому, полезны ли группы для решения. Одни и те же данные можно честно разбить на 3 или на 5 кластеров.

Процесс Data Mining по CRISP-DM

CRISP-DM (Cross-Industry Standard Process for Data Mining) — отраслевая методология, описанная консорциумом компаний в конце 1990-х. Она делит проект на шесть фаз.

  1. Понимание бизнеса. Формулируем цель и критерий успеха: «снизить отток на 5 п.п.», а не «проанализировать клиентов».
  2. Понимание данных. Смотрим, какие данные есть, их объем, пропуски, распределения, первые гипотезы.
  3. Подготовка данных. Собственно обработка: очистка, объединение источников, новые признаки, кодирование категорий. Обычно это самая трудоемкая фаза.
  4. Моделирование. Выбираем метод под задачу из таблицы выше и подбираем параметры.
  5. Оценка. Проверяем результат на отложенных данных и против критерия из шага 1, а не только по метрике модели.
  6. Внедрение. Отчет, правило в CRM, модель в продукте плюс мониторинг: данные со временем меняются, и модель устаревает.

Фазы не строго последовательные: на оценке часто выясняется, что не хватает признака, и проект возвращается к подготовке. Это нормальный цикл, а не провал. Похожую схему описывает процесс KDD (Knowledge Discovery in Databases): отбор, предобработка, трансформация, Data Mining, интерпретация.

Пример: ассоциативные правила на Python

Задача: по чекам магазина найти пары товаров, которые покупают вместе. Три метрики правила «X -> Y»:

  • support (поддержка) — доля чеков, где есть и X, и Y;
  • confidence (достоверность) — доля чеков с X, в которых есть и Y;
  • lift (подъем) — во сколько раз наличие X повышает шанс Y по сравнению со средним. Lift > 1 — связь положительная, около 1 — товары независимы, < 1 — отрицательная.

Полный код, стандартная библиотека, проверено на Python 3.14. Доли считаются дробями Fraction, а не float: пороги сравниваются на границе, и с дробями доля 0.6 или lift ровно 1 не превращаются в 0.5999... или 1.0000000000000002.

from fractions import Fraction
from itertools import combinations

# 10 чеков небольшого магазина
baskets = [
    {"хлеб", "молоко", "масло"},
    {"хлеб", "молоко"},
    {"хлеб", "масло"},
    {"хлеб", "кофе", "печенье"},
    {"хлеб", "кофе", "печенье"},
    {"хлеб", "молоко", "масло"},
    {"кофе", "печенье", "молоко"},
    {"хлеб", "молоко", "масло"},
    {"хлеб", "кофе"},
    {"кофе", "печенье"},
]
n = len(baskets)
MIN_SUPPORT = Fraction("0.3")      # пара встречается минимум в 30% чеков
MIN_CONFIDENCE = Fraction("0.6")   # правило верно минимум в 60% случаев

def support(items):
    return Fraction(sum(items <= b for b in baskets), n)

goods = sorted(set().union(*baskets))
for a, b in combinations(goods, 2):
    pair = {a, b}
    s = support(pair)
    if s < MIN_SUPPORT:
        continue
    for x, y in ((a, b), (b, a)):
        conf = s / support({x})
        lift = conf / support({y})
        if conf >= MIN_CONFIDENCE:
            print(f"{x} -> {y}: support={s:.2f} "
                  f"confidence={conf:.2f} lift={lift:.2f}")

Вывод:

кофе -> печенье: support=0.40 confidence=0.80 lift=2.00
печенье -> кофе: support=0.40 confidence=1.00 lift=2.00
кофе -> хлеб: support=0.30 confidence=0.60 lift=0.75
масло -> молоко: support=0.30 confidence=0.75 lift=1.50
молоко -> масло: support=0.30 confidence=0.60 lift=1.50
масло -> хлеб: support=0.40 confidence=1.00 lift=1.25
молоко -> хлеб: support=0.40 confidence=0.80 lift=1.00

Разбор: items <= b проверяет, что набор товаров целиком входит в чек; support считает долю таких чеков. Сначала отсекаем редкие пары по поддержке, затем для каждой пары проверяем правило в обе стороны — confidence у «кофе -> печенье» и «печенье -> кофе» разная.

Ловушка: высокая достоверность без подъема

Фильтр только по confidence пропустил два правила, которые выглядят полезными, но не являются ими. «Кофе -> хлеб» имеет confidence 0.60, но хлеб есть в 80% всех чеков, поэтому lift 0.75: покупатели кофе берут хлеб реже среднего. У «молоко -> хлеб» lift ровно 1.00 — связи нет, хлеб просто популярен. Здесь видна причина Fraction: на 15 чеках, где товары независимы (x в 5 чеках, y в 9, вместе в 3), расчет во float дает lift 1.0000000000000002, и фильтр lift > 1 ниже ошибочно пропустил бы такое правило.

Исправление — добавить условие на lift:

        if conf >= MIN_CONFIDENCE and lift > 1:

После замены строки остаются пять правил: «кофе -> печенье», «печенье -> кофе», «масло -> молоко», «молоко -> масло», «масло -> хлеб». Пара «кофе и печенье» с lift 2.00 — реальный кандидат на выкладку рядом или общую акцию.

Границы примера. Код перебирает только пары, и перебор всех комбинаций на тысячах товаров не масштабируется. Алгоритм Apriori решает это отсечением: если набор редкий, все его надмножества тоже редкие. В Python для этого есть готовые реализации, например в библиотеке mlxtend. И 10 чеков — учебный масштаб: на реальных данных правило стоит проверять на другом периоде, прежде чем менять выкладку. Правила ассоциации показывают совместную встречаемость, а не причину.

Где применяют Data Mining

Сфера Задача Пример
Розница и e-commerce Правила, кластеризация Товары «часто покупают вместе», сегменты покупателей
Банки и финтех Классификация, аномалии Кредитный скоринг, подозрительные операции
Телеком и подписки Классификация Прогноз оттока абонентов
Производство Аномалии, регрессия Отклонения датчиков, прогноз брака
Медицина Классификация Поддержка диагностики по снимкам и анализам (решение остается за врачом)

Что получится применить, зависит от качества обработки: модель на данных с дублями и пропусками выдает уверенно выглядящие, но неверные закономерности.

Если не получилось

  • Правил слишком много, и все очевидные. Поднимите MIN_SUPPORT и фильтруйте по lift; исключите товары, которые есть почти в каждом чеке.
  • Правил нет совсем. Порог поддержки слишком высокий для вашего объема данных — снижайте постепенно, следя за числом правил.
  • Кластеры меняются от запуска к запуску. Зафиксируйте random seed и отмасштабируйте признаки: у k-means признак в рублях перевешивает признак в штуках.
  • Модель отлично работает на обучении и плохо на новых данных. Проверьте утечку: нет ли в признаках информации из будущего, например даты закрытия сделки при прогнозе ее закрытия.

Подробнее о больших объемах и методах их обработки — в статье Большие данные: свойства и методы обработки.

Выводы

  • Обработка данных готовит сырые записи к работе, Data Mining ищет в подготовленных данных неочевидные закономерности.
  • Основные задачи Data Mining: классификация, регрессия, кластеризация, ассоциативные правила, последовательные шаблоны и поиск аномалий; выбор зависит от того, есть ли размеченный ответ.
  • CRISP-DM описывает шесть фаз с возвратами назад; подготовка данных обычно занимает больше всего времени.
  • В правилах ассоциации одной достоверности мало: без lift > 1 легко принять популярность товара за связь.

Где применяется / связь с практикой

Освойте тему на практике

На практике Data Mining — часть работы аналитика данных: сформулировать вопрос бизнеса, собрать и почистить данные в SQL и pandas, найти закономерности и донести вывод до команды. Если хотите пройти этот путь на реальных задачах, посмотрите программу курса «Аналитик данных». Разобраться в отдельных темах бесплатно можно на открытых уроках Otus.

Смежные темы: что можно делать с данными.

FAQ

Data Mining и Big Data — одно и то же?
Нет. Big Data описывает объем и скорость поступления данных и инфраструктуру для них, а Data Mining — методы поиска закономерностей. Их можно применять и к небольшой таблице.

Нужно ли знать программирование, чтобы заниматься Data Mining?
Для первых шагов хватит визуальных инструментов вроде Orange, KNIME или Weka, но в рабочих проектах обычно используют SQL и Python или R.

Чем Data Mining отличается от статистики?
Классическая статистика чаще проверяет заранее сформулированную гипотезу на выборке. Data Mining перебирает много возможных закономерностей, поэтому найденное нужно подтверждать на новых данных, иначе велик риск случайных совпадений.

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)