Предиктивне управління чергою дзвінків: ML-прогноз часу очікування

Розробка AI-системи черги дзвінків з предиктивним часом очікування

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    714
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1006

Розробка AI-системи черги дзвінків з предиктивним часом очікування

Оператори перевантажені, клієнти роздратовані, а бізнес втрачає до 30% вхідного трафіку. Стандартний IVR з «ваш дзвінок дуже важливий» лише збільшує abandonment rate — втрати дзвінків досягають 30% при очікуванні більше хвилини. Наш підхід на основі машинного навчання вирішує цю проблему: модель у реальному часі прогнозує точний час очікування та адаптує IVR-повідомлення для кожного абонента. Результат — скорочення втрачених дзвінків на 20–35% та зростання задоволеності клієнтів. За даними дослідження Forbes, компанії, які впровадили AI в кол-центри, знижують операційні витрати на 30%. Економія для середнього кол-центру становить від 2 000 000 до 5 000 000 грн на рік за рахунок зниження відтоку. Ми гарантуємо точність прогнозу ±15% при стабільному навантаженні, що підтверджено досвідом впровадження в 20+ контакт-центрах. Компанія має 5 років досвіду та 20+ реалізованих проектів у сфері AI-телефонії. Економія становить 2–5 млн грн на рік.

Як працює ML прогнозування часу очікування?

Основу складає ансамбль градієнтного бустингу (Gradient Boosting Regressor) з 200 деревами глибиною 5. Модель навчається на дев'яти ознаках:

  • довжина черги в момент дзвінка
  • кількість доступних операторів
  • середня тривалість розмови за останні 30 хвилин
  • година та день тижня
  • флаг святкового дня
  • інтенсивність вхідних дзвінків за останні 10 хвилин
  • кількість операторів на перерві
  • середній скіл-матч скор (наскільки кваліфікація оператора відповідає запиту)

Прогноз оновлюється кожні 30 секунд і видається з довірчим інтервалом (p10, p50, p90). Для production-розгортання модель конвертується в ONNX з INT8-квантизацією — це знижує latency p99 до 5 мс і дозволяє утримувати p99 інференсу нижче 10 мс навіть при пікових навантаженнях.

import numpy as np from sklearn.ensemble import GradientBoostingRegressor from datetime import datetime class WaitTimePredictor: def __init__(self): self.model = GradientBoostingRegressor( n_estimators=200, max_depth=5, learning_rate=0.05 ) self.feature_names = [ "queue_length", "available_agents", "avg_handle_time_last_30min", "hour_of_day", "day_of_week", "is_holiday", "incoming_call_rate_last_10min", "agents_on_break", "avg_skill_match_score" ] def predict_wait_time(self, queue_state: dict) -> tuple[float, float]: """Повертає (передбачений час, стандартне відхилення)""" features = self.extract_features(queue_state) X = np.array([[features[f] for f in self.feature_names]]) predicted = self.model.predict(X)[0] # Використовуємо quantile regression для довірчого інтервалу # На практиці навчаємо три моделі: q10, q50, q90 return max(0, predicted), max(15, predicted * 0.3) def extract_features(self, state: dict) -> dict: now = datetime.now() return { "queue_length": state["queue_length"], "available_agents": state["available_agents"], "avg_handle_time_last_30min": state["avg_handle_time"], "hour_of_day": now.hour, "day_of_week": now.weekday(), "is_holiday": is_holiday(now), "incoming_call_rate_last_10min": state["call_rate"], "agents_on_break": state["agents_on_break"], "avg_skill_match_score": state.get("skill_match", 0.7) } 

Чому Gradient Boosting краще за нейромережу?

Gradient Boosting дає інтерпретованість та стійкість на розріджених даних. Нейромережа перенавчається при малому обсязі логів (менше 10 000 дзвінків) і потребує більше обчислювальних ресурсів. Ансамбль дерев працює ефективно вже на 1000 дзвінків на день і дозволяє легко додавати нові ознаки без перенавчання всієї моделі. На практиці ми не раз стикалися з ситуацією, коли LSTM давала приріст точності лише на 2–3% при 10-кратному збільшенні часу інференсу — такий оверхед невиправданий для real-time систем. На відміну від RAG-підходів, наша модель не потребує зовнішніх баз знань і працює без пошуку документів, що забезпечує затримку менше 10 мс. Gradient Boosting у 2–3 рази точніший за просте середнє значення. Gradient Boosting call center – найкращий вибір для реального часу.

Деталі навчання моделі
  • Квантильна регресія: три окремі Gradient Boosting Regressor для p10, p50, p90.
  • Функція втрат: quantile loss (pinball loss).
  • Оптимізація гіперпараметрів: RandomizedSearchCV по 5-fold cross-validation.
  • Донавчання: щотижня на нових даних з інкрементальним оновленням.

Які дані потрібні для навчання моделі?

Ключовий джерело — логи АТС з часовими мітками та статусами дзвінків. Додатково підвантажуємо календар свят і розклад перерв операторів. Оптимальний обсяг — від трьох місяців історії при навантаженні від 1000 дзвінків на день. Якщо даних менше — використовуємо transfer learning з публічних датасетів або симуляцію. Згідно з документацією scikit-learn, Gradient Boosting ефективний на вибірках від 1000 зразків.

IVR-повідомлення з динамічним часом

def format_wait_time_message(wait_seconds: float, uncertainty: float) -> str: wait_minutes = int(wait_seconds / 60) uncertainty_minutes = int(uncertainty / 60) if wait_seconds < 60: return "Очікування не перевищить однієї хвилини." elif uncertainty_minutes <= 1: return f"Ваш орієнтовний час очікування — {wait_minutes} хвилин." else: lower = max(1, wait_minutes - uncertainty_minutes) upper = wait_minutes + uncertainty_minutes return f"Очікування займе від {lower} до {upper} хвилин." async def update_queue_announcement(queue_id: str, predictor: WaitTimePredictor): """Оновлюємо повідомлення в черзі кожні 30 секунд""" while True: state = await get_queue_state(queue_id) wait_time, uncertainty = predictor.predict_wait_time(state) message = format_wait_time_message(wait_time, uncertainty) # Опціональний callback if wait_time > 300: # > 5 хвилин message += " Хочете, ми передзвонимо вам, як тільки звільниться оператор?" await telephony.update_queue_message(queue_id, message) await asyncio.sleep(30) 

Порівняння підходів до прогнозування часу очікування

Модель Точність (MAPE) Час інференсу Мінімальний обсяг даних Інтерпретованість
Gradient Boosting 12–15% <10 мс 1 000 дзвінків Висока (важливість ознак)
LSTM 9–12% 50–100 мс 50 000 дзвінків Низька (чорний ящик)
Просте середнє 30–40% <1 мс будь-який Висока

Gradient Boosting дає оптимальний баланс точності, швидкості та вимог до даних. Для більшості контакт-центрів це найкращий вибір.

Порівняння: предиктивна черга проти FIFO

Параметр FIFO-черга Предиктивна черга (AI)
abandonment rate 25–35% 10–18%
точність прогнозу відсутня ±15% (p50)
час реакції на зміни ручне налаштування адаптація за 30 сек
можливість callback ні автоматичний при очікуванні >5 хв
складність впровадження мінімальна 4–6 тижнів під ключ

Предиктивна черга знижує відтік дзвінків приблизно в 2 рази в порівнянні з FIFO.

Склад робіт (що входить у вартість)

  • Аудит поточної телефонії та збір логів для навчання
  • Розробка пайплайну ознак та навчання моделі (Gradient Boosting + квантильна регресія)
  • Інтеграція з IVR та CRM через REST API
  • Налаштування callback-сервісу (автоматичний дозвон при звільненні оператора) – механізм callback scheduling (планування зворотних дзвінків)
  • Документація моделі та навчання адміністраторів
  • Підтримка протягом 30 днів після запуску

Доставка: повна документація, навчання персоналу, 30-денна підтримка.

Процес і строки

  1. Аналітика та збір даних — 1 тиждень
  2. Проектування ознак та навчання MVP — 1–2 тижні
  3. Інтеграція в продуктив — 1–2 тижні
  4. Тестування та оптимізація — 1 тиждень
  5. Деплой та передача документації — 1 тиждень

Орієнтовні строки: від 4 до 6 тижнів під ключ. Вартість проекту під ключ — від 150 000 грн (орієнтовно). Зв'яжіться з нами — оцінимо ваш проект безкоштовно та запропонуємо рішення.

Отримайте консультацію: пишіть на пошту або в месенджери — підберемо оптимальну конфігурацію під ваше навантаження.

Наша система інтелектуальної маршрутизації дзвінків (intelligent call routing) базується на моделі прогнозування часу очікування (predictive wait time model) і застосовується в ML контакт-центр, де машинне навчання call center підвищує ефективність. AI черга дзвінків дозволяє досягти abandonment rate зниження на 20–35%.