Повернення — головний біль будь-якого ритейлера: 10–15% виручки йде на операційні витрати, знецінення товару та фрод. Ми побудували не одну систему, яка вирішує цю тріаду: детекція шахрайських схем, оптимізація рішень щодо повернення та прогноз обсягу повернень. У цій статті розберемо архітектуру на реальному стеку: LightGBM, Prophet, NLP-класифікатори, SHAP для інтерпретації.
Типовий ритейлер втрачає до 30% від вартості повернення на обробку. AI-модель здатна скоротити витрати на 20–40% за рахунок автоматизації та раннього виявлення фроду. На прикладі мережі з 200 магазинів ми скоротили ручну обробку на 60%. Якщо ви хочете скоротити витрати на повернення, зв'яжіться з нами для аудиту ваших даних — ми підберемо оптимальне рішення.
Чому AI-моделі ефективніші за правила для управління поверненнями?
Шахрайські повернення бувають різними:
- Wardrobing: покупка для разового використання (сукня на захід) з подальшим поверненням.
- Price arbitrage: покупка зі знижкою → повернення → повторна покупка з ще більшою знижкою.
- Receipt fraud: повернення без чека із завищеною «ціною покупки».
- Bricking: повернення зламаного або підміненого товару.
- Return-to-shelf fraud: співробітник фіктивно оформляє повернення і привласнює гроші.
Індикатори шахрайського повернення: return_rate_customer вище 30%, повернення без чека >50%, кілька повернень за тиждень, повернення > середнього чека ×3, покупка більше 60 днів тому, неспівпадіння серійного номера, крос-канальне повернення (купив онлайн — повертає в магазин), покупка 25 грудня — повернення 2 січня.
Правила (if-else) легко писати, але вони не ловлять складні комбінації ознак і швидко застарівають. LightGBM знаходить нелінійні залежності і дає точність вище на 15–20%. Ми використовуємо scale_pos_weight=50 для балансування рідкісного класу фроду.
def extract_return_features(return_event, customer_history, item_data):
customer_returns = customer_history[customer_history['type'] == 'return']
return {
'customer_lifetime_return_rate': len(customer_returns) / len(customer_history),
'customer_return_value_total': customer_returns['amount'].sum(),
'days_since_first_purchase': (today - customer_history['date'].min()).days,
'return_to_purchase_ratio_90d': calculate_return_ratio(customer_history, 90),
'days_since_purchase': (today - return_event['purchase_date']).days,
'return_amount_usd': return_event['amount'],
'return_amount_vs_avg_purchase': return_event['amount'] / customer_history['amount'].mean(),
'has_receipt': return_event['receipt_present'],
'original_channel': return_event['purchase_channel'],
'return_channel': return_event['return_channel'],
'cross_channel': return_event['purchase_channel'] != return_event['return_channel'],
'item_category_return_rate': item_data['category_avg_return_rate'],
'item_price_tier': item_data['price_tier'],
'item_is_seasonal': item_data['is_seasonal'],
'item_sale_item': item_data['was_on_sale']
}
from lightgbm import LGBMClassifier
import shap
fraud_model = LGBMClassifier(
scale_pos_weight=50,
n_estimators=300
)
fraud_model.fit(X_train, y_fraud_train)
def evaluate_return_fraud(return_features):
score = fraud_model.predict_proba([return_features])[0][1]
if score > 0.7:
explainer = shap.TreeExplainer(fraud_model)
shap_values = explainer.shap_values(return_features)
top_reason = get_top_shap_feature(shap_values)
return {
'decision': 'manual_review',
'fraud_score': score,
'primary_reason': top_reason,
'recommended_action': 'verify_serial_number_and_condition'
}
return {'decision': 'approve', 'fraud_score': score}
LightGBM у 2–3 рази точніший за правила при детекції wardrobing і receipt fraud. SHAP (SHapley Additive ExPlanations) — метод інтерпретації, заснований на кооперативній теорії ігор. Для кожного передбачення SHAP обчислює внесок кожної ознаки в підсумковий score. Це дозволяє пояснити, чому конкретне повернення позначене як шахрайське: наприклад, «високий return_rate_customer» і «повернення без чека». Аналітик бачить топ-3 причини і приймає зважене рішення.
Як Decision Engine оптимізує рішення?
def return_decision_engine(return_request, fraud_score, business_rules):
customer_tier = get_customer_tier(return_request['customer_id'])
item_category = return_request['item_category']
if fraud_score < 0.2 and customer_tier == 'gold':
return 'auto_approve'
elif fraud_score > 0.7:
return 'manual_review_required'
elif item_category in ['consumables', 'digital', 'underwear']:
return 'restricted_return_policy'
else:
return 'standard_return_process'
Замість повного повернення — обмін, частковий refund, store credit. Для клієнтів з високим LTV — розширена політика як retention-інструмент.
| Рішення | Коли застосовується | Вплив на LTV |
|---|---|---|
| auto_approve | fraud_score <0.2 і клієнт gold | +15% retention |
| manual_review | fraud_score >0.7 | уникаємо фроду |
| standard_return | інші випадки | - |
Поріг 0.7 обраний на основі ROC-аналізу: при такому threshold precision на фроді становить 0.85 при recall 0.6. Для premium-клієнтів поріг може бути знижений до 0.9, щоб мінімізувати false positives. Модель перенавчається щомісяця з урахуванням нових схем.
Як NLP допомагає знизити відсоток повернень?
from transformers import pipeline
return_reason_classifier = pipeline(
'text-classification',
model='fine_tuned_return_reason_classifier'
)
return_categories = {
'wrong_size': 'sizing issue',
'not_as_described': 'product quality/description mismatch',
'changed_mind': 'buyer remorse',
'damaged': 'quality defect',
'wrong_item': 'fulfillment error',
'price_change': 'found cheaper elsewhere'
}
def analyze_return_reasons(return_comments):
predictions = return_reason_classifier(return_comments)
return [{'text': text, 'category': pred['label'], 'confidence': pred['score']}
for text, pred in zip(return_comments, predictions)]
Зворотний зв'язок: багато «not_as_described» — виправити опис/фото на сайті, багато «wrong_size» — покращити size guide, багато «damaged» — проблема з упаковкою. Це знижує повернення на 10–15%.
Прогнозування обсягу повернень
Прогноз повернень необхідний для планування персоналу, управління запасами та фінансового резервування.
def forecast_returns_volume(sales_history, return_rates_by_category, promo_calendar):
seasonal_return_multiplier = {
1: 1.8,
2: 1.2,
11: 1.3,
12: 1.5
}
sales_forecast = prophet_sales_model.predict(forecast_horizon=30)
return_forecast = {}
for category, sales in sales_forecast.items():
base_rate = return_rates_by_category[category]
season_factor = seasonal_return_multiplier.get(forecast_month, 1.0)
return_forecast[category] = sales * base_rate * season_factor
return return_forecast
| Метод | Точність прогнозу | Інтерпретованість | Складність впровадження |
|---|---|---|---|
| Правила | Низька | Висока | Низька |
| LightGBM | Висока | Середня (SHAP) | Середня |
| Prophet + сезонність | Середня | Висока | Низька |
Комбінування методів дає найкращий результат.
Як ми впроваджуємо систему: покроково
- Аналіз даних та бізнес-процесів (1–2 тижні): збір історії повернень, аудит якості даних, визначення метрик.
- Розробка ML-моделі (2–3 тижні): побудова бейзлайн, ітеративне покращення, валідація на історичних даних.
- Інтеграція decision engine (1–2 тижні): налаштування API, підключення до CRM, тестування на реальних транзакціях.
- A/B тестування та деплой (1–2 тижні): запуск на частині потоку, моніторинг якості, повний rollout.
- Навчання операторів та підтримка (безперервно).
Що входить у роботу
- API-документація моделі та decision engine
- LightGBM модель з SHAP-поясненнями для кожного рішення
- NLP-класифікатор причин повернення
- Інтеграція з CRM через REST (1–2 тижні)
- Навчання операторів роботі з системою
- Гарантія на модель: 6 місяців з можливістю донавчання
Строки орієнтовно
- Fraud detection + decision engine: від 4 до 5 тижнів
- NLP-аналіз причин, прогноз обсягу, customer tier policies: від 2 до 3 місяців
- Вартість розраховується індивідуально після аудиту даних.
Ми — команда AI/ML інженерів з досвідом більше 8 років. Реалізували 30+ проектів для ритейлерів, включаючи мережі з оборотом 10 млрд руб. Автоматизували повернення для 5+ ритейлерів, скоротивши час обробки на 60% і зменшивши частку фроду в 2 рази. Отримайте консультацію — оцінимо ваш проект і запропонуємо рішення під ключ. Зв'яжіться з нами для аудиту ваших даних.







