Использование дифференцируемой индукции правил для извлечения проверяемых правил IF-THEN, свидетельствующих о мошенничестве, из обученной нейронной сети — без написания ни одного правила вручную.
Делиться

Большинство нейросимволических систем внедряют правила, написанные людьми. Но что, если бы нейронная сеть могла сама обнаруживать эти правила?
В этом эксперименте я расширяю гибридную нейронную сеть модулем обучения правилам с возможностью дифференциации, который автоматически извлекает правила мошенничества типа «ЕСЛИ-ТО» во время обучения. На наборе данных Kaggle о мошенничестве с кредитными картами (уровень мошенничества 0,17%) модель выучила интерпретируемые правила, такие как:
IF V14 < −1.5σ AND V4 > +0.5σ → Fraud
где σ обозначает стандартное отклонение признака после нормализации.
Модель обучения правилам достигла показателя ROC-AUC 0,933 ± 0,029, сохранив при этом 99,3% точности предсказаний нейронной сети.
Что особенно интересно, модель самостоятельно заново обнаружила V14 — признак, который, как давно известно аналитикам, тесно коррелирует с мошенничеством, — без указания искать его.
В данной статье представлен воспроизводимый нейросимволический эксперимент в области искусственного интеллекта, демонстрирующий, как нейронная сеть может обнаруживать интерпретируемые правила мошенничества непосредственно из данных.
Полный код: github.com/Emmimal/neuro-symbolic-ai-fraud-pytorch
Что обнаружила модель
Вот что получилось, не считая архитектуры, функции потерь или каких-либо деталей обучения.
После 80 эпох обучения (с ранней остановкой большинство начальных значений сходились между эпохами 56–78) алгоритм обучения правилам выдал следующие значения в двух начальных значениях, где правила проявились четко:
Начальное значение 42 — наиболее чистое правило (5 условий, достоверность = 0,95)
Правило обнаружения мошенничества — Зародыш 42 · Правила никогда не кодировались вручную
IF V14 < −1.5σ AND V4 > +0.5σ AND V12 < −0.9σ AND V11 > +0.5σ AND V10 < −0.8σ THEN FRAUDСемя 7 — правило комплементарного соответствия (8 условий, conf=0,74)
Правило обнаружения мошенничества — Семя 7 · Правила никогда не кодировались вручную
IF V14 < −1.6σ AND V12 < −1.3σ AND V4 > +0.3σ AND V11 > +0.5σ AND V10 < −1.0σ AND V3 < −0.8σ AND V17 < −1.5σ AND V16 < −1.0σ THEN FRAUDВ обоих случаях низкие значения V14 лежат в основе логики — поразительное совпадение, учитывая отсутствие каких-либо предварительных указаний.
Модели так и не было указано, какая именно функция имеет значение.
Однако, независимо от других факторов, оно заново обнаружило ту же самую особенность, которую аналитики-люди выявляли на протяжении многих лет.
Нейронная сеть, обнаруживающая собственные правила мошенничества, — это именно то, что обещает нейросимволический ИИ: сочетание статистического обучения с понятной человеку логикой. В остальной части статьи объясняется, как и почему градиент продолжал находить V14, даже когда ему ничего о нем не сообщалось.
От внедренных правил к изученным правилам — почему это важно
У каждой модели мошенничества есть свои границы принятия решений. Однако команды по борьбе с мошенничеством работают, руководствуясь правилами. Разрыв между ними, между тем, что узнала модель, и тем, что аналитики могут прочитать, проверить и обосновать перед регулирующим органом, — это то, где команды по обеспечению соответствия риску преуспевают.
В моей предыдущей статье из этой серии я закодировал два правила аналитика непосредственно в функцию потерь: если сумма транзакции необычно высока и если сигнатура PCA аномальна, считать образец подозрительным. Этот подход сработал. Гибридная модель показала результаты обнаружения, сопоставимые с чистой нейронной сетью, оставаясь при этом интерпретируемой.
Но было одно очевидное ограничение, которое я не учел. Я написал эти правила. Я выбрал эти две особенности, потому что они показались мне интуитивно понятными. Правила, написанные вручную, кодируют то, что вы уже знаете, и являются хорошим решением, когда схемы мошенничества стабильны, а знания в предметной области глубоки. Они являются плохим решением, когда схемы мошенничества меняются, когда наиболее важные признаки анонимизированы (как в этом наборе данных) или когда вы хотите, чтобы модель выявляла сигналы, которые вы не догадались искать.
Естественно возникает следующий вопрос: какие характеристики выбрал бы градиент, если бы ему была предоставлена свобода выбора?
Эта закономерность выходит за рамки мошенничества. Медицинским диагностическим системам необходимы правила, которые врачи могут проверить, прежде чем предпринимать какие-либо действия. Модельным системам кибербезопасности необходимы правила, которые инженеры могут проверить. Системы борьбы с отмыванием денег работают в рамках нормативных требований, предусматривающих объяснимые решения. В любой области, сочетающей редкие события, экспертные знания и требования соответствия, возможность извлечения проверяемых правил типа «ЕСЛИ-ТО» из обученной нейронной сети имеет непосредственную ценность.
С архитектурной точки зрения, изменение удивительно простое. Вы не заменяете многослойный перцептрон (MLP), вы добавляете второй путь, который учится выражать решения MLP в виде удобочитаемых символических правил. MLP обучается обычным образом. Модуль правил учится согласовываться с ним в символической форме. Это и есть тема данной статьи: дифференцируемая индукция правил примерно в 250 строках кода PyTorch, без предварительного знания того, какие функции имеют значение.
«Вы не заменяете нейронную сеть. Вы учите её объяснять саму себя».
Архитектура: три обучающих элемента
Архитектура сохраняет стандартную нейронную сеть, но добавляет второй путь, который обучается символическим правилам, объясняющим решения сети. Два пути работают параллельно, получая один и тот же входной сигнал, а их выходные данные объединяются с помощью обучаемого веса α:

Путь MLP идентичен предыдущему: три полносвязанных слоя с пакетной нормализацией. Путь правил — новый. Альфа — это обучаемый скаляр, который модель использует для взвешивания двух путей; он начинается с 0,5 и обучается методом градиентного спуска, как и любой другой параметр. После обучения α сходился к приблизительно 0,88 в среднем по всем начальным значениям (диапазон: 0,80–0,94). Модель научилась взвешивать нейронный путь примерно на 88%, а путь правил — на 12% в среднем. Правила не заменяют MLP, они представляют собой структурированное символическое резюме того, чему научился MLP.
1. Обучаемый дискретизатор
Правилам необходимы бинарные входные данные — находится ли V14 ниже порогового значения? Да или нет. Нейронным сетям необходимы непрерывные, дифференцируемые операции. Мягкий сигмоидный пороговый метод объединяет оба подхода.
Для каждого признака f и каждого обучаемого порога t:
bf,t=σ (xf−θf,tτ)b_{f,t} = sigma!left(frac{x_f – theta_{f,t}}{tau}right)
Где:
- xfx_f — это значение признака *f* для данной транзакции.
- θf,ttheta_{f,t}t — обучаемый пороговый параметр , инициализируемый случайным образом и обучаемый методом обратного распространения ошибки.
- τtau — температура : высокая в начале обучения (исследовательский этап), низкая позже (четкий этап).
- bf,tb_{f,t} — это мягкий бинарный выходной сигнал: «Превышает ли признак *f* пороговое значение *t*?»
Модель обучается трем пороговым значениям для каждого признака, что дает ей три «среза» на каждое измерение. Каждый порог является независимым — модель может распределять их по всему диапазону признака или концентрировать вокруг наиболее дискриминантной точки среза.

При τ=5,0 (эпоха 0): сигмоидная функция почти плоская. Каждое значение признака создает градиент. Модель свободно исследует пространство. При τ=0,1 (эпоха 79): сигмоидная функция почти ступенчатая. Пороговые значения установлены. Границы читаются как условия, воспринимаемые человеком.
class LearnableDiscretizer(nn.Module): def __init__(self, n_features, n_thresholds=3): super().__init__() # One learnable threshold per (feature × bin) self.thresholds = nn.Parameter( torch.randn(n_features, n_thresholds) * 0.5 ) self.n_thresholds = n_thresholds def forward(self, x, temperature=1.0): # x: [B, F] → output: [B, F * n_thresholds] soft binary features x_exp = x.unsqueeze(-1) # [B, F, 1] t_exp = self.thresholds.unsqueeze(0) # [1, F, T] soft_bits = torch.sigmoid( (x_exp - t_exp) / temperature ) return soft_bits.view(x.size(0), -1) # [B, F*T]2. Слой обучения правилам
Каждое правило представляет собой взвешенную комбинацию бинаризованных признаков, пропущенных через сигмоиду: rule(x)=σ (∑iwr,i⋅biτ)text{rule}_r(x) = sigma!left(frac{sum_i w_{r,i} cdot b_i}{tau}right)
Знак каждого веса имеет прямое толкование после сжатия с помощью tanh:
- w>+0.5w > +0.5 → для срабатывания этого правила параметр должен быть ВЫСОКИМ.
- w<−0.5w < -0.5 → для срабатывания этого правила значение параметра должно быть НИЗКИМ.
- ∣w∣<0.5|w| < 0.5 → признак не имеет отношения к этому правилу
Извлечение правил происходит напрямую: после обучения применяется пороговое значение к абсолютным значениям весов, чтобы определить, какие признаки использует каждое правило. Именно так возникают операторы IF-THEN из непрерывных параметров — путем считывания матрицы весов.
class RuleLearner(nn.Module): def __init__(self, n_bits, n_rules=4): super().__init__() # w_{r,i}: which binarized features matter for each rule self.rule_weights = nn.Parameter( torch.randn(n_rules, n_bits) * 0.1 ) # confidence: relative importance of each rule self.rule_confidence = nn.Parameter(torch.ones(n_rules)) def forward(self, bits, temperature=1.0): w = torch.tanh(self.rule_weights) # bounded in (-1, 1) logits = bits @ wT # [B, R] rule_acts = torch.sigmoid(logits / temperature) # [B, R] conf = torch.softmax(self.rule_confidence, dim=0) fraud_prob = (rule_acts * conf.unsqueeze(0)).sum(dim=1, keepdim=True) return fraud_prob, rule_acts3. Температурный отжиг
Температура следует экспоненциальному графику затухания: τ(t) = τstart ⋅ (τendτstart)t/Ttau(t) = tau_{text{start}} cdot left(frac{tau_{text{end}}}{tau_{text{start}}}right)^{t/T}
При τ_start=5.0, τ_end=0.1, T=80 эпох:
| Эпоха | τ | Состояние |
|---|---|---|
| 0 | 5.00 | Правила полностью мягкие — градиентные потоки повсюду |
| 40 | 0,69 | Ужесточение правил — пороговые значения для совершения преступлений |
| 79 | 0.10 | Правила почти четкие — читаются как IF-THEN |

def get_temperature(epoch, total_epochs, tau_start=5.0, tau_end=0.1): progress = epoch / max(total_epochs - 1, 1) return tau_start * (tau_end / tau_start) ** progressБез отжига модель остается «мягкой», и правила никогда не кристаллизуются во что-либо, что мог бы прочитать аналитик по борьбе с мошенничеством или утвердить отдел комплаенса. Отжиг — это то, что преобразует непрерывную оптимизацию в символический результат.
Перед описанием функции потерь — краткое замечание о том, откуда взялась эта идея и чем данная реализация отличается от предыдущих работ.
Опираясь на достижения ∂ILP, NeuRules и FINRule
Данная работа в контексте существующей литературы заслуживает рассмотрения не как всесторонний обзор, а для того, чтобы прояснить, какие идеи заимствованы, а какие являются новыми.
Дифференцируемое индуктивное логическое программирование (∂ILP) ввело ключевую идею о том, что индуктивное логическое программирование, традиционно рассматриваемое как задача комбинаторного поиска, может быть переформулировано как дифференцируемая программа, обучаемая с помощью градиентного спуска. Ключевая идея здесь заключается в использовании мягких логических операторов, которые позволяют градиентам проходить через структуры, подобные правилам . Однако ∂ILP требует предопределенных шаблонов правил и объявлений фоновых знаний, что затрудняет его интеграцию в стандартные конвейеры глубокого обучения.
Недавние исследования, в которых для обнаружения мошенничества применяются дифференцируемые правила, такие как FINRule , показывают, что подходы, основанные на обучении правилам, могут хорошо работать даже на сильно несбалансированных финансовых наборах данных. Эти исследования демонстрируют, что обученные правила могут соответствовать логике обнаружения, разработанной вручную, и при этом легче адаптироваться к новым моделям мошенничества.
Другие системы, такие как RIFF и нейросимволические списки правил, вводят дифференцируемые правила в стиле деревьев решений и делают акцент на разреженности для сохранения интерпретируемости. L1-регуляризация, используемая в этой реализации, следует тому же принципу: она побуждает правила опираться лишь на несколько условий, а не на все доступные признаки.
Представленная в этой статье реализация объединяет эти идеи — дифференцируемую дискретизацию и конъюнктивное обучение — но сводит их примерно к 250 строкам кода на PyTorch без зависимостей . Никакого шаблонного языка. Никаких объявлений фоновых знаний. Цель — минимальный модуль обучения правилам, который можно интегрировать в стандартный цикл обучения.
Трехкомпонентная функция потерь: обнаружение + согласованность + разреженность
Полная цель обучения:
Ltotal = LBCE + λc ⋅ Lconsistency + λs ⋅ Lsparsity + λconf ⋅ Lconfidence L_total = L_BCE + λc ⋅ Lconsistency + λs ⋅ Lsparsity + λconf ⋅ Lconfidence
L_BCE — Взвешенная бинарная кросс-энтропия
Аналогично предыдущей статье. pos_weight = count(y=0) / count(y=1) ≈ 578. Один размеченный образец мошенничества генерирует градиент в 578 раз больше, чем образец, не являющийся мошенничеством. Этот член остается неизменным, путь правила не добавляет сложности к основной задаче обнаружения.
L_последовательность — Новый термин
Правила должны соответствовать MLP там, где MLP уверен в их корректности. В операционном плане: среднеквадратичная ошибка (MSE) между rule_prob и mlp_prob, с учетом прогнозов, где MLP либо явно указывает на мошенничество (>0,7), либо явно не указывает на мошенничество (<0,3):
confident_mask = (mlp_prob > 0.7) | (mlp_prob < 0.3) if confident_mask.sum() > 0: consist_loss = F.mse_loss( rule_prob.squeeze()[confident_mask], mlp_prob.squeeze()[confident_mask].detach() # ← critical ) Метод .detach() имеет решающее значение: мы обучаем правила следовать за многослойным перцептроном (MLP), а не наоборот. MLP остается основным обучающим алгоритмом. Неопределенная область (0,3–0,7) намеренно исключена, поскольку именно здесь правила могут обнаружить то, что MLP может пропустить.
L_sparsity — Keep Rules Simple
Штраф L1 для исходных (до применения tanh) весов правил: mean(|W_rules|) . Без этого правила поглощают все 30 признаков и становятся нечитаемыми. При λ_s=0,25 оптимизатор смещает нерелевантные признаки к нулю, оставляя действительно полезные признаки — V14, V4, V12 — на уровне |w| ≈ 0,5–0,8 после применения tanh-сжатия.
L_confidence — Правила подавления шума
Небольшой штраф L1 к логитам достоверности (λ_conf=0,01) приводит к тому, что правила с низкой достоверностью стремятся к нулевому весу в выходной комбинации, фактически исключая их. Без этого появляется множество технически активных, но бессмысленных правил с достоверностью 0,02–0,04, которые маскируют реальный сигнал.
Итоговые гиперпараметры: λ_c=0,3, λ_s=0,25, n_rules=4, λ_conf=0,01.
Вот что получилось, когда оборудование было установлено.
Результаты: Работает ли обучение правилам — и что оно показало?
Экспериментальная установка
- Набор данных: Kaggle, Мошенничество с кредитными картами, 284 807 транзакций, уровень мошенничества 0,173%.
- Разделение: 70/15/15, стратифицированное по метке класса, 5 случайных начальных значений [42, 0, 7, 123, 2024]
- Пороговое значение: F1-максимизация на проверочном наборе данных, применяемая симметрично к тестовому набору данных.
- Протокол оценки аналогичен протоколу статьи 1.
Эффективность обнаружения

| Модель | F1 (среднее значение ± стандартное отклонение) | PR-AUC (среднее значение ± стандартное отклонение) | ROC-AUC (среднее значение ± стандартное отклонение) |
|---|---|---|---|
| Изоляционный лес | 0.121 | 0,172 | 0,941 |
| Чисто нейронный (Статья 1) | 0,804 ± 0,020 | 0,770 ± 0,024 | 0,946 ± 0,019 |
| Программа для изучения правил (эта статья) | 0,789 ± 0,032 | 0,721 ± 0,058 | 0,933 ± 0,029 |
Примечание: данные по изолированному лесу взяты из статьи 1 для справки. Все остальные модели оценивались с использованием идентичных разбиений, пороговых значений и начальных точек.
Модель, обучающаяся правилам, немного отстает от чисто нейронной модели по всем трем метрикам обнаружения, примерно на 1,5 пункта F1 в среднем. Компромисс заключается в объяснимости. Разбивка по каждому исходному узлу показывает полную картину:
| Семя | NN F1 | RL F1 | NN ROC | РЛ РОК | Верность | Покрытие |
|---|---|---|---|---|---|---|
| 42 | 0,818 | 0,824 | 0.9607 | 0.9681 | 0.9921 | 0.8243 |
| 0 | 0,825 | 0,832 | 0.9727 | 0,9572 | 0,9925 | 0,8514 |
| 7 | 0,779 | 0,776 | 0.9272 | 0.9001 | 0,9955 | 0.7568 |
| 123 | 0,817 | 0,755 | 0.9483 | 0.8974 | 0.9922 | 0.8108 |
| 2024 | 0,779 | 0,759 | 0.9223 | 0.9416 | 0,9946 | 0.8108 |
При использовании начальных значений 42 и 0 алгоритм обучения правилам превосходит базовый нейронный алгоритм по показателю F1. При использовании начального значения 2024 он превосходит его по показателю ROC-AUC. Разница в производительности между начальными значениями дает объективное представление о том, что дает индукция правил на основе градиента на наборе данных с 0,17% несбалансированности.
Качество правил — новый вклад
Три показателя, каждый из которых отвечает на вопрос, который мог бы задать инспектор по соблюдению нормативных требований.
Точность правил — могу ли я доверять этому набору правил в том, что он отражает фактические решения модели?
def rule_fidelity(mlp_probs, rule_probs, threshold=0.5): mlp_preds = (mlp_probs > threshold).astype(int) rule_preds = (rule_probs > threshold).astype(int) return (mlp_preds == rule_preds).mean()Охват правил — какую долю реального мошенничества выявляет хотя бы одно правило?
def rule_coverage(rule_acts, y_true, threshold=0.5): any_rule_fired = (rule_acts > threshold).any(axis=1) return any_rule_fired[y_true == 1].mean()Простота правил — сколько уникальных условий для каждого правила после удаления дубликатов?
def rule_simplicity(rule_weights_numpy, weight_threshold=0.50): # Divide by n_thresholds (=3) to get unique features, # the meaningful readability metric. Target: < 8. active = (np.abs(rule_weights_numpy) > weight_threshold).sum(axis=1) unique_features = np.ceil(active / 3.0) unique_features = unique_features[unique_features > 0] return float(unique_features.mean()) if len(unique_features) > 0 else 0.0| Метрическая система | среднее значение ± стандартное отклонение | Цель | Статус |
|---|---|---|---|
| Верность | 0,993 ± 0,001 | > 0,85 | Отличный |
| Покрытие | 0,811 ± 0,031 | > 0.70 | Хороший |
| Простота (уникальные особенности/правило) | 1,7 ± 2,1 | < 8 | В среднем, преобладают три начальных значения, где путь выполнения правила полностью схлопнулся (простота = 0); в двух активных начальных значениях правила использовали 5 и 8 условий — что делает их легко читаемыми. |
| α (конечный) | 0,880 ± 0,045 | — | MLP доминирует |
Это подчеркивает реальное противоречие в обучении дифференцируемым правилам: сильная регуляризация разреженности создает четкие правила, когда они появляются, но может привести к тому, что символический путь станет нечетким в некоторых начальных условиях. Именно из-за этой дисперсии крайне важно сообщать среднее значение ± стандартное отклонение по всем начальным значениям, а не выбирать лучшее начальное значение.
Показатель точности 0,993 означает, что в начальных точках, где правила активны, они совпадают с многослойным перцептроном в 99,3% случаев бинарных решений — функция потерь согласованности работает именно так, как задумано.

Извлеченные правила — что показал градиент

Оба правила полностью приведены в начале этой статьи. Краткая версия: при посеве 42 было получено строгое правило с 5 условиями (уверенность = 0,95), при посеве 7 — более широкое правило с 8 условиями (уверенность = 0,74). В обоих случаях V14 < −1,5σ (или −1,6σ) является ведущим условием.
Анализ признаков, полученных при перекрестном посеве, подтверждает закономерность, наблюдаемую во всех пяти вариантах посева:
| Особенность | Появляется в | Средневзвешенный балл |
|---|---|---|
| V14 | 2/5 семян | 0.630 |
| V11 | 2/5 семян | 0,556 |
| V12 | 2/5 семян | 0,553 |
| В10 | 2/5 семян | 0,511 |
| V4 | 1/5 семян | 0,616 |
| V17 | 1/5 семян | 0,485 |
Даже при наличии всего двух начальных значений, дающих видимые правила, V14 занял первое или второе место в обоих случаях — статистически поразительное совпадение, учитывая отсутствие каких-либо предварительных указаний относительно признаков. Модели не нужно было указывать, что именно искать.
«Модель получила 30 анонимизированных признаков и градиентный сигнал. Тем не менее, она обнаружила V14».
Что показала модель — и почему это имеет смысл
V14 — один из 28 компонентов PCA, извлеченных из анонимизированных данных о транзакциях по кредитным картам. Что именно он представляет собой, не является общедоступной информацией — в этом и заключается смысл анонимизации. Многочисленные независимые анализы показали, что V14 имеет самую высокую абсолютную корреляцию с меткой мошенничества среди всех признаков в наборе данных.
Почему алгоритм обучения правилам это обнаружил? Механизм заключается в ошибке согласованности. Обучая правила таким образом, чтобы они соответствовали уверенным прогнозам многослойного перцептрона (MLP), алгоритм обучения правилам считывает внутренние представления MLP и преобразует их в символическую форму. MLP уже узнал из меток, что V14 важен. Ошибка согласованности перенесла этот сигнал в матрицу весов правил. Затем температурный отжиг закрепил этот вес в четком пороговом условии.
В этом заключается принципиальное различие между внедрением правил (статья 1) и обучением правилам (эта статья). Внедрение правил кодирует то, что вы уже знаете. Обучение правилам обнаруживает то, чего вы не знаете. В этом эксперименте открытием стал сигнал V14 — сигнал, который градиент обнаружил самостоятельно, без указания искать его.
В пяти вариантах начальных значений читаемые правила выявились в двух из них, неизменно выделяя V14. Это убедительно демонстрирует, что градиентный спуск может заново обнаруживать критически важные для предметной области сигналы, не требуя от пользователя специальных указаний по их поиску.

Теперь группа по обеспечению соответствия может прочитать Правило 1, убедиться, что V14 < −1,5σ соответствует предметной области, и утвердить его — без необходимости открывать матрицу весов. Именно для этого и предназначено нейросимволическое обучение правилам.
Четыре момента, на которые следует обратить внимание перед развертыванием этого
- Скорость отжига — ваш самый чувствительный гиперпараметр. Слишком быстро: правила кристаллизуются до того, как MLP успеет чему-либо научиться — вы получите четкий бессмысличный код. Слишком медленно: τ никогда не опускается достаточно низко, и правила остаются мягкими. Рассматривайте τ_end как первый параметр, который нужно настроить на новом наборе данных.
- Параметр n_rules задает ваш бюджет интерпретируемости. При количестве правил от 8 до 10 у вас будет справочная таблица, а не набор правил, подлежащих аудиту. При количестве правил меньше 4 вы можете пропустить скрытые схемы мошенничества. Оптимальное количество правил для обеспечения соответствия требованиям — от 4 до 8.
- Порог согласованности предполагает калибровку многослойного перцептрона (MLP). Если ваш базовый MLP плохо откалиброван — что часто встречается на сильно несбалансированных данных — маска срабатывает слишком редко. Постройте калибровочный график на основе результатов валидации. Рассмотрите возможность применения масштабирования Платта, если калибровка плохая.
- Обученные правила необходимо проверять после каждого переобучения. В отличие от замороженных правил, написанных вручную, обученные правила обновляются при каждом переобучении модели. Команда по обеспечению соответствия не может утвердить правила один раз и уйти — утверждение должно происходить при каждом цикле переобучения.
Внедрение правил против обучения правилам — когда что использовать?
| Ситуация | Использовать |
|---|---|
| Глубокие знания в предметной области, устойчивые модели мошенничества. | Внедрение правил (статья 1) |
| Неизвестные или изменяющиеся схемы мошенничества | Изучение правил (эта статья) |
| Для соблюдения требований необходимы поддающиеся проверке и понятные правила. | Обучение правилам |
| Быстрый эксперимент, минимальные инженерные затраты. | Внедрение правил |
| Комплексный конвейер интерпретируемости | Обучение правилам |
| Небольшой набор данных (<10 тыс. образцов) | Внедрение правил — потеря согласованности требует сигнала |
Метод обучения правилам добавляет примерно 200 строк кода и перебор гиперпараметров. Он не бесплатный. На очень маленьких наборах данных функция потерь согласованности может не накапливать достаточно информации для обучения значимым правилам — необходимо проверять достоверность, прежде чем считать извлеченные правила авторитетными. Этот подход — инструмент, а не решение.
Одно честное наблюдение из эксперимента с пятью начальными значениями: в 3 из 5 начальных значений сильное давление разреженности привело к тому, что все веса правил оказались ниже порога извлечения. Модель сошлась к правильному ответу на вопрос об обнаружении, но выразила его исключительно через путь многослойного перцептрона. Это расхождение реально. Результаты, полученные с использованием одного начального значения, дали бы обманчиво четкую картину — именно поэтому многоначальная оценка является обязательной для любой статьи, в которой делаются заявления о поведении изученных правил.
Следующий вопрос в этой серии статей — могут ли эти извлеченные правила сигнализировать о сдвиге концепции, то есть выявлять, когда модели мошенничества изменились настолько, что правила нуждаются в обновлении до того, как производительность модели начнет снижаться. Когда важность правил версии V14 снижается в весовых коэффициентах, а показатели обнаружения остаются стабильными, распределение мошенничества может меняться. Этот ранний предупреждающий сигнал станет темой следующей статьи.
Раскрытие информации
Данная статья основана на независимых экспериментах с использованием общедоступных данных (набор данных Kaggle о мошенничестве с кредитными картами, CC-0 Public Domain) и инструментов с открытым исходным кодом (PyTorch, scikit-learn). Не использовались никакие проприетарные наборы данных, ресурсы компаний или конфиденциальная информация. Результаты и код полностью воспроизводимы в описанном виде, а полная реализация находится в репозитории GitHub. Мнения и выводы, выраженные здесь, являются моими собственными и не отражают позицию какого-либо работодателя или организации.
Ссылки
[1] Эванс, Р., и Грефенстетте, Э. (2018). Изучение объяснительных правил на основе зашумленных данных. JAIR, 61, 1–64. https://arxiv.org/abs/1711.04574
[2] Вольфсон, Б., и Акар, Э. (2024). Дифференцируемое индуктивное логическое программирование для обнаружения мошенничества. Препринт arXiv:2410.21928. https://arxiv.org/abs/2410.21928
[3] Мартинс, Дж. Л., Браво, Дж., Гомес, А. С., Соарес, К., и Бизарро, П. (2024). RIFF: Построение правил обнаружения мошенничества на основе деревьев решений. RuleML+RR 2024. arXiv:2408.12989. https://arxiv.org/abs/2408.12989
[4] Сюй, С., Вальтер, Н.П., и Врикен, Дж. (2024). Нейросимволические списки правил. Препринт arXiv:2411.06428. https://arxiv.org/abs/2411.06428
[5] Кустерс, Р., Ким, Й., Коллери, М., де Сент-Мари, К., и Гупта, С. (2022). Дифференцируемая индукция правил с помощью изученных реляционных признаков. Препринт arXiv:2201.06515. https://arxiv.org/abs/2201.06515
[6] Даль Поццоло, А. и др. (2015). Калибровка вероятности с помощью недовыборки для несбалансированной классификации. IEEE SSCI. Набор данных: https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud (CC-0)
[7] Александр, Э.П. (2026). Гибридное нейросимволическое обнаружение мошенничества. К науке о данных. https://towardsdatascience.com/hybrid-neuro-symbolic-fraud-detection-guiding-neural-networks-with-domain-rules/
[8] Лю, Ф.Т., Тин, К.М., и Чжоу, З.-Х. (2008). Изоляционный лес. В сборнике трудов Восьмой международной конференции IEEE по интеллектуальному анализу данных (ICDM), стр. 413–422. IEEE. https://doi.org/10.1109/ICDM.2008.17
[9] Пашке А. и др. (2019). ПайТорч. NeurIPS 32. https://pytorch.org.
[10] Педрегоса, Ф. и др. (2011). Scikit-learn: машинное обучение на Python. JMLR, 12, 2825–2830. https://scikit-learn.org
Код: github.com/Emmimal/neuro-symbolic-ai-fraud-pytorch
Предыдущая статья: Гибридное нейросимволическое обнаружение мошенничества: управление нейронными сетями с помощью правил предметной области
Эммимал П. Александр. Посмотреть все работы Эммимал П. Александра.
Источник: towardsdatascience.com























