Отбраковка мошеннических объявлений о продаже квартир

Загрузка данных, разметка по 21 метрике, обучение модели и анализ объявлений

Загрузка данных

📖 Справка — что происходит на этом шаге?

На этом шаге вы загружаете данные — таблицу объявлений о продаже квартир — в базу данных системы. После загрузки данные можно размечать и обучать на них модель.

Датасет
Именованный набор данных — таблица объявлений, хранящаяся в БД. Можно создать несколько датасетов (например, «март 2026» и «апрель 2026») и сравнивать результаты обучения на разных данных.
CSV / TSV — формат файла
CSV (Comma-Separated Values) — таблица, где столбцы разделены запятой. TSV (Tab-Separated Values) — то же самое, но разделитель — символ табуляции (⇥). Это обычный текстовый файл, который можно открыть в Excel или блокноте.
Разделитель
Символ, отделяющий столбцы друг от друга в файле. Выберите «Табуляция» для TSV-файлов и «Запятая» для CSV-файлов. Если выбрать неправильно — все данные загрузятся в один столбец.
Столбец is_fraud
Признак мошенничества: 0 — нормальное объявление, 1 — мошенническое. Если в вашем файле этот столбец уже заполнен экспертом — разметку (Шаг 2) можно пропустить и сразу перейти к Шагу 3 «Обучение».
Статистика датасета
После загрузки можно посмотреть: сколько строк и столбцов, сколько из них размечено (есть метка is_fraud), сколько мошеннических. Помогает убедиться, что файл загрузился корректно и данные выглядят ожидаемо.

Датасеты в БД

Загрузить CSV/TSV в выбранный датасет

Выберите датасет выше, затем загрузите файл.

Статистика датасета

📋 Справочник — признаки датасета и форматы файлов
Столбцы датасета (21 признак)
СтолбецЧто означаетТип
priceПолная цена квартиры, руб.число
total_areaОбщая площадь, м²число
living_areaЖилая площадь, м²число
kitchen_areaПлощадь кухни, м²число
roomsКоличество комнатчисло
floorЭтаж квартирычисло
total_floorsЭтажность домачисло
ceiling_heightВысота потолков, мчисло
year_builtГод постройки домачисло
days_on_marketСколько дней объявление висит на сайтечисло
cityГородтекст
addressАдрес объявлениятекст
house_typeТип дома (кирпичный, панельный, монолитный…)текст
description_textТекст объявления от продавцатекст
seller_phoneТелефон продавцатекст
seller_nameИмя / псевдоним продавцатекст
seller_innИНН продавца (если указан)текст
seller_typeТип продавца: собственник / агентствотекст
listing_dateДата публикации объявлениядата
regionРегион / субъект РФтекст
is_fraudМетка: 0 = нормальное, 1 = мошенническое. Если заполнена экспертом — Шаг 2 можно пропустить0 / 1

CSV vs TSV — когда что использовать:

ФорматРазделительКогда использовать
CSVЗапятая ,Стандартный экспорт из большинства систем и Excel (сохранить как…)
TSVТабуляция Если данные содержат запятые внутри полей (например, в адресах)

Разметка по 21 метрике обнаружения мошенничества

📖 Справка — что происходит на этом шаге?

На этом шаге система автоматически проверяет каждое объявление по 21 правилу и ставит метку: мошенническое (1) или нормальное (0). Это называется синтетической разметкой — автоматической, на основе правил.

Зачем нужна разметка?
Модель машинного обучения учится на примерах — нужно показать ей, какие объявления мошеннические. Разметка создаёт эти примеры автоматически, без ручной проверки каждой строки.
21 метрика
Набор из 21 правила разных типов: статистические (аномальная цена), логические (противоречия в описании), поведенческие (подозрительная активность продавца), контентные (ключевые слова мошенничества), временны́е и геолокационные. Каждое сработавшее правило добавляет очки риска — если сумма превышает порог, объявление получает метку «мошенническое».
Синтетическая разметка vs экспертная
Синтетическая — быстро, автоматически, но может ошибаться (правила не идеальны). Экспертная — вручную человеком, точнее. Если у вас есть CSV с готовым столбцом is_fraud от эксперта — используйте его и пропустите этот шаг.
Осторожно: разметка перезапишет метки
Если датасет уже содержит столбец is_fraud — запуск разметки заменит все значения новыми, сгенерированными правилами. Экспертные метки будут потеряны.
Когда разметку можно пропустить?

Если загруженный CSV уже содержит столбец is_fraud с экспертными метками (0 / 1) — запускать разметку не нужно. Перейдите сразу к шагу 3 «Обучение».
Запуск разметки перезапишет экспертные метки синтетическими.

Комплексная разметка (21 метрика)

Система из 21 метрики: статистические, логические, поведенческие, контентные, временные и геолокальные проверки.

📋 Справочник — 21 правило и формула Fraud Score

Fraud Score — итоговая оценка подозрительности от 0 до 1. Это взвешенная сумма сработавших метрик, делённая на максимально возможную сумму. Чем ближе к 1 — тем подозрительнее объявление.

Формула: Fraud Score = Σ(risk_index × weight) / Σ(max_possible)

Три зоны риска: низкий риск (чистое) → средний (подозрительное) → высокий (мошенническое). В системе 6 уровней Fraud Score, укрупнённо — 3 зоны.

Три типа правил:

  • Жёсткий порог — число вшито в код, не меняется (потолок < 2 м, комнат > 6)
  • Динамически по датасету — порог считается по загруженному CSV (5-й/95-й процентиль цены)
  • Сравнение внутри датасета — смотрит на повторения между строками одного CSV (один телефон в 20 объявлениях)
Таблица всех 21 правила
#НазваниеЧто проверяетТип порога
1Аномальная цена за м²Цена/площадь выходит за 5–95 процентиль по своему городудинамически по городу
2Аномальная цена (абсолютная)Полная цена квартиры за пределами 5–95 процентиля датасетадинамически
3Аномальная площадьПлощадь > 115 м² или < 10 м²жёсткий
4Несоответствие структурыКомнат > 6, или < 6 м² на комнату, или кухня > 50% площади, или жилая > общейжёсткий
5Быстрая продажаПродаётся менее 3 днейжёсткий
6Активный продавецОдин телефон фигурирует в > 20 объявлениях датасетасравнение внутри
7Отсутствие информацииБолее 50% ключевых полей пустыежёсткий
8Подозрительное описаниеОписание 1–20 символов, или в тексте есть номер телефонажёсткий
9Аномальная цена на комнатуЦена/комнату > 95 процентиля по датасетудинамически
10Проблемный адресАдрес заполнен, но длина 1–5 символовжёсткий
11Состояние и возрастГод постройки < 1800 или > текущий+2, или потолки < 2 м или > 4 мжёсткий
12Экстремально низкая ценаЦена/м² менее 50% от нижнего процентилядинамически
13Юридический статусВ описании 2+ слов: «срочно», «без посредников», «наследство», «доверенность»…список слов
14Данные продавца2 или более из трёх полей (телефон, имя, ИНН) отсутствуютжёсткий
15Дублирующиеся объявленияЦена + площадь + комнаты + этаж + город совпадают с другим объявлениемсравнение внутри
16Невалидный ИННИНН заполнен, но не 10 и не 12 цифржёсткий
17Массовый телефонОдин телефон > 5 объявлений (мягче метрики 6)сравнение внутри
18Активный «собственник»Телефон с пометкой «собственник» в > 10 объявленияхсравнение внутри
19Плагиат описанияMD5-хэш текста совпадает с другим объявлениемсравнение внутри
20Темп размещенияПродавец публикует > 3 объявлений в деньсравнение внутри
21Один телефон — разные именаОдин телефон фигурирует под > 3 разными именамисравнение внутри

Обучение модели

📖 Справка — что происходит на этом шаге?

На этом шаге модель машинного обучения учится отличать мошеннические объявления от нормальных. Перед обучением данные автоматически проходят конвейер предобработки — подготовку, как чистка и нарезка овощей перед готовкой.

Дубликаты
Одинаковые строки в таблице — одно и то же объявление, добавленное дважды. Удаляются автоматически, иначе модель считает его «важнее», хотя это просто технический повтор.
Пропущенные значения
Пустые ячейки в таблице — данных нет (например, не указан этаж). Большинство алгоритмов не умеют работать с пустотой: числовые заполняем средним по столбцу, текстовые — самым частым значением.
Нормализация и стандартизация
Приведение числовых признаков к сопоставимому масштабу. Пример: цены 1–50 млн и этажи 1–25 — без нормализации модель будет «слушать» только цену, потому что её числа больше. После — оба признака влияют одинаково.
Кодирование категориальных признаков (One-Hot Encoding)
Перевод текстовых значений в числа. Пример: «тип дома» = кирпичный / панельный / монолитный → три столбца (is_кирпичный, is_панельный, is_монолитный) с 0 или 1. Только одна «1» в строке — отсюда название One-Hot.
TF-IDF — обработка текстового описания
Метод превращения текста объявления в числа с учётом важности слов. TF — как часто слово встречается в этом объявлении. IDF — насколько редко оно встречается во всех объявлениях. Редкое и специфичное слово получает высокий балл; слова «и», «в», «на» — почти нулевой. Результат — числовой вектор, по одному числу на каждое слово словаря.
Мультиколлинеарность и отбор признаков
Если два признака несут одинаковую информацию (например, «цена» и «цена за м²» — зная одно, можно вычислить другое), один удаляется. Это запутывает модель: она не знает, кому «доверять». Меньше шума — лучше результат.
Разделение 80 / 20
Датасет делится на две части: 80% — обучающая выборка (на ней модель учится), 20% — тестовая (честная проверка результата). Модель не видит тестовую выборку во время обучения. Как экзамен: учишься по билетам, но сдаёшь другие вопросы.
Random Forest / Логистическая регрессия / Gradient Boosting
Три алгоритма на выбор. Random Forest — ансамбль деревьев решений, устойчив к выбросам, хорошо работает «из коробки». Логистическая регрессия — простая и интерпретируемая, быстро обучается. Gradient Boosting — мощный алгоритм, но медленнее. Для детектирования мошенничества обычно лучший результат у Random Forest или Gradient Boosting.
Вероятность, выше которой объявление считается мошенническим. Ниже → больше подозрительных (меньше пропусков), выше → меньше ложных срабатываний. Произвольный комментарий: ФИО оператора, район, цель модели и т.д. Отображается в списке моделей.

Сохранённые модели

📋 Справочник — три модели и метрики качества
МодельКак работаетПлюсыМинусы
Logistic RegressionРисует разделяющую линию между классамиБыстрая, интерпретируемая, точка отсчёта для сравненияПлохо улавливает нелинейные зависимости
Random ForestАнсамбль деревьев решений, итог — голосование большинстваУстойчив к выбросам и переобучению, хорошо из коробкиМедленнее логрегрессии на больших данных
Gradient BoostingДеревья строятся последовательно, каждое исправляет ошибки предыдущегоКак правило лучший результат по качествуМедленнее, чувствителен к параметрам

Параметры обучения:

ПараметрЧто означаетПо умолчанию
test_sizeДоля данных, отложенных для проверки. Модель их не видит при обучении0.2 (20%)
fraud_thresholdПорог вероятности для метки «мошенник». Ниже → больше находит, выше → меньше ложных тревог0.2
class_weight='balanced'Ошибка на редком классе (мошенники) стоит дороже. Компенсирует дисбаланс классоввключено всегда

Метрики качества:

МетрикаЧто показываетКогда важна
AccuracyДоля всех правильных ответовНенадёжна при дисбалансе — модель может всегда говорить «чистое» и получить 90%
PrecisionИз всех названных мошенниками — сколько реально мошенники?Важна, если дорого ложно обвинить
RecallИз всех реальных мошенников — скольких нашла модель?Важнее Precision в нашей задаче — лучше лишний раз проверить
F1Баланс Precision и Recall в одном числеОсновная метрика при дисбалансе классов
ROC-AUCНасколько хорошо модель ранжирует подозрительные выше чистых. 1.0 — идеал, 0.5 — монеткаНаш результат: 0.996

Сравнение ROC-кривых моделей

Прогноз и экспорт

📖 Справка — что происходит на этом шаге?

На этом шаге обученная модель применяется к данным и для каждого объявления выдаёт прогноз: мошенническое или нормальное. Результаты можно скачать для дальнейшей работы.

Прогноз по датасету из БД
Применяет выбранную модель к датасету, уже загруженному в систему. Удобно для повторного анализа тех же данных другой моделью или с другими параметрами порога.
Прогноз по загруженному файлу
Позволяет загрузить новый CSV/TSV файл и сразу получить прогноз — без сохранения в БД. Удобно для разовой проверки новой порции объявлений.
Столбцы в результатах
fraud_probability — вероятность мошенничества от 0 до 1 (например, 0.85 = 85%). is_fraud_predicted — итоговая метка: 1 (мошенническое) или 0 (нормальное), зависит от порога классификации, заданного при обучении.
Экспорт CSV / Excel
CSV — универсальный текстовый формат, открывается в любой программе. Excel — отформатированный файл с цветовой подсветкой строк по результату прогноза.

Прогноз по датасету из БД

Прогноз по загруженному файлу

📋 Справочник — столбцы результатов и форматы экспорта
СтолбецЧто означает
fraud_probabilityВероятность мошенничества от 0 до 1. Например, 0.85 = модель на 85% уверена, что объявление мошенническое. Используйте для сортировки «топ подозрительных»
is_fraud_predictedИтоговая метка: 1 = мошенническое, 0 = нормальное. Присваивается автоматически: если fraud_probability ≥ порог (задан при обучении) → 1
ФорматОсобенностиКогда использовать
CSVТекстовый файл, открывается в любой программеДля дальнейшей обработки, загрузки в другие системы
Excel (.xlsx)Цветовая подсветка строк по результату прогнозаДля ручного просмотра и передачи модератору

Экспорт CSV / Excel

Сначала выполните прогноз по датасету, затем скачайте файл.

Скачать CSV Скачать Excel

Дашборд системы

📖 Справка — что показывает этот раздел?

Дашборд — сводная страница с общей картиной работы системы: архитектура, статистика данных и результаты анализа мошеннических объявлений.

Архитектура системы
Схема того, как устроена система: браузер → Nginx → FastAPI → PostgreSQL. Nginx — «администратор на ресепшене», принимает все запросы. FastAPI — «сотрудник в кабинете», выполняет реальную работу. PostgreSQL — база данных, где хранятся объявления, модели и результаты.
Статистика по датасету
Общая сводка по загруженным данным: сколько объявлений, сколько размечено, сколько выявлено мошеннических. Помогает оценить масштаб и качество загруженных данных.
Анализ мошеннических объявлений
Детализация по конкретным объявлениям с высоким риском: какие правила сработали, какой итоговый балл риска (fraud_score). Удобно для ручной проверки подозрительных случаев.

Архитектура системы

📋 Справочник — архитектура и компоненты системы

Схема запроса: Браузер → Nginx → FastAPI → PostgreSQL/Redis

КомпонентРоль в системеАналогия
NginxОбратный прокси: принимает все запросы, отдаёт статику (HTML/CSS/JS), перенаправляет /api/* в FastAPIАдминистратор на ресепшене
FastAPIСервер приложений на Python: обрабатывает запросы API, обучает модели, считает метрикиСотрудник в кабинете
PostgreSQLРеляционная база данных: хранит объявления, метки, метаданные моделей, результаты прогнозовАрхив с папками
RedisХранилище в памяти: JWT-токены авторизации, кэш. Данные не сохраняются после перезапускаДоска для стикеров
Docker ComposeЗапускает все четыре компонента одной командой в изолированных контейнерахКоробка с отсеками

Таблица метрик обнаружения мошенничества (21 метрика)

Пороги классификации Fraud Score

Timeline операций