Itinai.com a split screen photorealistic image of two compute 3f3c3d48 14eb 458c bcf3 739369f920b8 0

Как решить проблему безопасности с ClawHub: гайд по сигналам

Itinai.com a split screen photorealistic image of two compute 3f3c3d48 14eb 458c bcf3 739369f920b8 0

Что делает код и зачем он нужен

В примере показан типичный рабочий процесс построения классификатора, который принимает два типа признаков:

  • текстовое поле skill_md_content (обрезанное до 6000 символов);
  • числовые метрики сканеров (skillspector_score, static_finding_count, skillspector_issue_count, virustotal_malicious_count).

Задача – предсказать clawscan_verdict, то есть судить о том, безопасна ли сущность (например, репозиторий) согласно результатам сканирования.

Подготовка данных

Функция prep делает три вещи:

  • заполняет пропуски в тексте пустой строкой и обрезает его до 6000 символов, чтобы TF‑IDF не «залипал» на гигантские документы;
  • приводит все числовые колонки к типу float, заменяя ошибочные значения NaN;
  • возвращает копию датафрейма, чтобы оригинал оставался нетронутым.

Важный момент – df.copy() защищает от случайного изменения исходных наборов train_df и test_df.

Текстовый пайплайн

Текстовая часть построена на TfidfVectorizer с такими параметрами:

  • max_features=20000 – фиксируем размер словаря, иначе память может взлететь;
  • ngram_range=(1,2) – учитываем отдельные слова и их пары, что обычно повышает качество;
  • min_df=3 – отбрасываем редкие токены, которые появляются в менее чем трёх документах;
  • sublinear_tf=True – применяем логарифмическое масштабирование частоты, чтобы частые слова не доминировали.

Объект FunctionTransformer просто извлекает столбец с текстом из датафрейма, поэтому ColumnTransformer может работать с разными типами признаков одновременно.

Числовой пайплайн

Для чисел используем два шага:

  • SimpleImputer(strategy="constant", fill_value=0) – заменяем пропуски нулями, что удобно, когда отсутствие сканера воспринимается как «нет угроз»;
  • StandardScaler() – приводим признаки к одинаковой шкале (среднее = 0, σ = 1), иначе логистическая регрессия будет «чувствовать» только те, у кого масштаб больше.

Сборка общей модели

Компонент ColumnTransformer объединяет два пайплайна в одну матрицу признаков, после чего к ней применяется LogisticRegression с параметрами:

  • max_iter=2000 – гарантирует сходимость даже при большом числе признаков;
  • C=4.0 – умеренно слабая регуляризация, повышающая гибкость модели;
  • class_weight="balanced" – компенсирует дисбаланс классов, часто встречающийся в задачах по безопасности;
  • multi_class="multinomial" – корректно работает с более чем двумя метками.

Оценка модели

После обучения выводятся:

  • Отчёт classification_report с точностью, полнотой и f1‑мерой для каждого класса;
  • Матрица ошибок (confusion matrix) – визуализируется через seaborn;
  • Примеры неверных классификаций, чтобы быстро понять характер ошибок.

Эти шаги позволяют не только проверить качество, но и «почерпнуть» идеи для дальнейшего улучшения (например, добавить новые сканеры или изменить n‑gram диапазон).

Практические рекомендации

  • Контроль объёма текста. Если ваш датасет содержит очень длинные описания, экспериментируйте с slice(0, N), где N ≈ 3000‑6000 символов – это экономит оперативную память.
  • Тонкая настройка TF‑IDF. Попробуйте включить stop_words="ru" (или английский список) если в корпусе много «шумных» слов.
  • Балансировка классов. Вместо class_weight="balanced" можно применить оверсэмплинг (SMOTE) или подвыборку, если класс дисбаланс слишком велик.
  • Гиперпараметры логистики. Поиграйте с C (регуляция) и solver (например, saga для больших разреженных матриц).
  • Валидация. Используйте StratifiedKFold или TimeSeriesSplit, если данные имеют временную зависимость.
  • Отладка ошибок. Анализируйте строки из блока «Sample misclassifications»: часто они указывают на недостающие признаки или на шум в метках.

Где взять исходники

Полный код, включая загрузку данных и визуализацию, доступен в репозитории GitHub:

Для более глубокого погружения в теорию TF‑IDF и логистической регрессии смотрите оригинальные статьи и документацию scikit‑learn:

Итоги

Приведённый пайплайн – хороший стартовый шаблон для задач, где нужно совместить «мягкие» (текст) и «жёсткие» (числовые метрики) признаки. С небольшими изменениями его можно применить как к анализу кода, так и к оценке уязвимостей, политик compliance или даже к классификации отзывов. Главное – держать данные чистыми, внимательно настраивать количество признаков и не забывать проверять, где модель ошибается.

Запустите свой ИИ проект бесплатно

ИИ-агенты искусственный интеллект онлайн для бизнеса

Лучший ИИ онлайн