Разработка AI-системы выбора и оценки поставщиков Supplier Risk AI
Отказ ключевого поставщика может остановить производство: дефицит одного компонента обходится дороже, чем превентивный мониторинг всей базы поставщиков. AI-система формирует динамический рейтинг поставщиков и сигнализирует о рисках за 2–6 недель до их реализации.
Данные для оценки поставщика
Внутренние данные:
- OTIF (On Time In Full): доля поставок в срок и в полном объёме
- Quality rejection rate: % отклонённых партий, возвраты
- Invoice accuracy: ошибки в документах, расхождения с PO
- Response time: время ответа на запросы, инциденты
Внешние данные:
- Финансовая отчётность (СПАРК, Rusbonds для РФ; Bloomberg, D&B для международных)
- Новостной мониторинг: санкции, судебные иски, смена руководства, пожары на заводе
- Таможенная статистика: динамика объёмов экспорта поставщика
- ESG-рейтинги (MSCI, Sustainalytics, CDP)
- Геополитические риски по стране происхождения
Модель оценки рисков
Комплексный Supplier Risk Score (0–100)
import pandas as pd
import numpy as np
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.preprocessing import StandardScaler
class SupplierRiskModel:
def __init__(self):
self.model = GradientBoostingClassifier(
n_estimators=200, learning_rate=0.05,
max_depth=4, subsample=0.8
)
self.scaler = StandardScaler()
def build_features(self, supplier_data):
"""Формирование признаков для оценки риска"""
features = {
# Операционные метрики (последние 12 мес)
'otif_12m': supplier_data['on_time_in_full_rate'],
'otif_trend': supplier_data['otif_q4'] - supplier_data['otif_q1'],
'quality_rejection_rate': supplier_data['rejection_rate'],
'avg_lead_time_deviation': supplier_data['lead_time_std'],
# Финансовые метрики
'current_ratio': supplier_data['current_assets'] / supplier_data['current_liabilities'],
'debt_to_equity': supplier_data['total_debt'] / supplier_data['equity'],
'revenue_growth_yoy': supplier_data['revenue_growth'],
'altman_z_score': self._altman_z(supplier_data),
# Концентрационные риски
'single_source_flag': int(supplier_data['is_sole_supplier']),
'country_risk_score': supplier_data['country_political_risk'],
'customer_concentration': supplier_data['top_customer_pct'], # % выручки от нас
}
return pd.DataFrame([features])
def _altman_z(self, d):
"""Altman Z-score для прогноза банкротства"""
return (1.2 * d['working_capital'] / d['total_assets'] +
1.4 * d['retained_earnings'] / d['total_assets'] +
3.3 * d['ebit'] / d['total_assets'] +
0.6 * d['market_cap'] / d['total_liabilities'] +
1.0 * d['revenue'] / d['total_assets'])
NLP-мониторинг новостей:
from transformers import pipeline
risk_classifier = pipeline(
"text-classification",
model="ProsusAI/finbert", # финансовый sentiment
device=0
)
RISK_KEYWORDS = {
'critical': ['банкротство', 'пожар', 'санкции', 'арест', 'ликвидация'],
'high': ['убытки', 'задержка', 'проверка', 'штраф', 'авария'],
'medium': ['реструктуризация', 'смена директора', 'забастовка']
}
def score_news_risk(news_texts, supplier_id):
results = []
for text in news_texts:
sentiment = risk_classifier(text[:512])[0]
risk_level = 'low'
for level, keywords in RISK_KEYWORDS.items():
if any(kw in text.lower() for kw in keywords):
risk_level = level
break
results.append({'text': text[:100], 'sentiment': sentiment, 'risk': risk_level})
return results
Оповещение и действия
Alert-система по уровням:
| Уровень | Триггер | Действие |
|---|---|---|
| Критический | Score <20 или новость о банкротстве | Немедленное уведомление CPO, активация backup |
| Высокий | Score 20–40 или OTIF <70% за 3 мес | Совещание с поставщиком, поиск альтернативы |
| Средний | Score 40–60 или тренд снижения | Аудит, усиленный входной контроль |
| Низкий | Score >80 | Плановый мониторинг |
Backup Supplier Discovery:
При риск-триггере: автоматический поиск альтернативных поставщиков:
- Матчинг по техническим требованиям (номенклатура, сертификаты, объём)
- Приоритет: уже аттестованные, но неактивные поставщики
- Оценка lead time на переключение
Сегментация базы поставщиков
Кластеризация (k-means) по двум осям: стратегическая важность × уровень риска:
- Стратегические с высоким риском: глубокий мониторинг, совместные программы risk mitigation
- Стратегические с низким риском: партнёрские программы, долгосрочные контракты
- Транзакционные с высоким риском: немедленный поиск замены
- Транзакционные с низким риском: базовый мониторинг
Срок разработки: 3–5 месяцев для системы с интеграцией внутренних ERP-данных, NLP-мониторингом новостей и автоматическими алертами.







