Разработка AI-системы анализа кредитоспособности
ML-кредитный скоринг превосходит традиционные модели по точности и охвату: он работает с альтернативными данными, захватывает нелинейные взаимодействия признаков и может оценивать заёмщиков с тонким кредитным файлом.
Ограничения традиционного скоринга
FICO, НБКИ скоринг — логистическая регрессия с узким набором признаков (история платежей, загруженность лимита, длительность кредитной истории, типы кредитов). Проблемы:
- 1 из 5 американцев — "кредитно невидимый" (thin file): недостаточно данных для оценки
- Линейная модель пропускает взаимодействия признаков
- Статичная модель не адаптируется к изменению макроэкономики
ML-скоринг: +8–15 п.п. Gini vs. логистической регрессии на одних и тех же данных, +15–25 п.п. при включении альтернативных данных.
Источники данных для ML-скоринга
Традиционные кредитные данные
- Кредитное бюро (НБКИ, ОКБ, Equifax): история платежей, текущие обязательства, запросы
- Социально-демографические: возраст, доход, регион, занятость
Альтернативные данные
- Транзакционные данные: паттерны расходов (через Open Banking PSD2). Регулярные пополнения = стабильный доход. Расходы на азартные игры = риск-фактор. Накопления = позитивный сигнал.
- Телефонные данные: регулярность пополнений, оператор, использование дополнительных сервисов
- Поведение в браузере: устройство, провайдер, время суток обращений (опционально, с согласия)
- Данные о занятости: подтверждённый работодатель, стаж, должность
import lightgbm as lgb
from sklearn.model_selection import TimeSeriesSplit
from sklearn.calibration import CalibratedClassifierCV
# Feature groups
credit_bureau_features = ['dpd_30d', 'dpd_60d', 'dpd_90d', 'utilization', 'num_accounts',
'max_dpd_24m', 'months_since_last_delinquency']
application_features = ['age', 'income', 'employment_months', 'debt_to_income', 'region']
transaction_features = ['avg_monthly_income_t3m', 'income_stability', 'gambling_spend_ratio',
'savings_ratio', 'recurring_payments_count']
all_features = credit_bureau_features + application_features + transaction_features
model = lgb.LGBMClassifier(
n_estimators=500, learning_rate=0.01, num_leaves=63,
min_child_samples=50, colsample_bytree=0.7,
class_weight='balanced', random_state=42
)
# Time-based split (не random - избегает lookahead bias)
tscv = TimeSeriesSplit(n_splits=5)
scores = cross_val_score(model, X[all_features], y, cv=tscv, scoring='roc_auc')
# Calibration обязателен для вероятностных предсказаний
calibrated_model = CalibratedClassifierCV(model, method='isotonic', cv=3)
Explainability (обязательная)
Отказ в кредите → регулятор требует причин. SHAP values для каждого решения:
import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_single_applicant)
# Топ-3 негативных фактора
negative_factors = sorted(
zip(feature_names, shap_values[1]),
key=lambda x: x[1]
)[:3]
# Вывод: "Основные факторы отказа: высокая загруженность кредитных лимитов,
# короткий стаж на текущем месте работы, наличие просрочек в 2023 году"
Требование ECOA (США) и аналогичные нормы в ЕС/РФ: письменное объяснение отказа.
Fairness и Anti-Discrimination
ML-модели могут воспроизводить историческую дискриминацию. Обязательный аудит:
- Disparate Impact analysis: сравнение approval rate по демографическим группам
- Equalized Odds testing: одинаковые TPR/FPR для разных групп
- Proxy feature detection: адрес/район не должен быть proxy на этничность
Mitigation: adversarial debiasing, reweighting, constraint optimization.
Мониторинг после деплоя
Model performance monitoring: PSI (Population Stability Index) для мониторинга feature drift. При PSI > 0.25 → переобучение модели.
Vintage analysis: сравнение default rates когорт по месяцам выдачи → детекция деградации модели.
Economic cycle adjustment: в кризис baseline default rate растёт. Динамическая калибровка скоринга к макроэкономическому контексту.
Срок разработки: 4–8 месяцев с регуляторным review и A/B тестом против production модели.







