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

Ручний розбір чеків з'їдає час співробітників і все одно дає помилки в даних. Ми розробляємо AI-систему аналізу чеків під ключ: вона читає касові дані, розпізнає позиції та зводить їх у зрозумілі звіти. На виході замовник отримує готовий потік даних і скорочення ручної роботи в рази.
Часті запитання

Аналіз чеків: де ручна обробка дає збій

Один збій у товарній аналітиці виглядає передбачувано: позиції чека переносять руками.

Оператор вводить рядки з паперового чека або скану в таблицю, і вже на цьому кроці губляться артикули, вага й акційні рядки — розбіжність із підсумковою сумою чека знаходиться не одразу, а під час звіряння.

Чим більше точок і позицій, тим довший ланцюжок ручного введення і тим вищий шанс, що частина чека просто не потрапить у вивантаження.

Далі починаються помилки в товарних даних. Один і той самий товар заводиться і як «Кола 0,5», і як «cola 0.5 бут», опиняється в різних категоріях — і зведення за категорією перестає відображати реальність, бо продажі, націнка й залишки рахуються за різними підставами.

Відстежити помилку до конкретного чека не вдається: джерело даних — уже переписана вручну таблиця, а не первинний документ.

Затримка вивантаження чеків робить картину системною. Поки чеки розбирають вручну, товарна аналітика відстає на дні, і закупівля, викладка та акції плануються за даними, які застаріли раніше, ніж потрапили у звіт.

Сплеск попиту за конкретною позицією видно лише тоді, коли він уже закінчився, а розбіжність між системами доводиться розбирати вручну, чек за чеком.

Ключова ціна такого процесу — не час оператора, а втрата керування асортиментом: рішення ухвалюються за даними, яким не можна довіряти, і немає точки, де помилку можна відсікти. Розбираємо, як це закривається.

Що змінюється: швидкість, повнота й якість даних

Роздрібна мережа з кількома десятками точок вивантажувала продажі з кас вручну: оператори завантажували архіви чеків із кабінету оператора фіскальних даних, зводили зміни й розшифровували рядки, де найменування скорочено до «напій сік 1л ябл». Добова партія збиралася до вечора наступного дня, і рішення щодо полиці ухвалювалися навмання.

Що було до впровадження

Обробка добової партії займала близько восьми годин роботи трьох операторів, а частка позицій, доведених до товарної категорії, не перевищувала 60%.

Решта осідала вільним текстом, звіти за категоріями з’являлися через добу, а розбіжності з обліковою системою 1С знаходили вже після закриття зміни — заднім числом.

Що змінили і що отримали

Розбір побудували як послідовність: приймання вивантажень, нормалізація рядків, зіставлення з номенклатурним довідником, донавчання моделі на спірних випадках.

Позиції з низькою впевненістю потрапляють у чергу розбору з пріоритетом за часткою в товарообігу, а правки оператора стають навчальними прикладами — тому точність розпізнавання позицій на типовому асортименті тримається вище 99%.

Добова партія обробляється за 15–20 хвилин замість восьми годин, повнота даних за категоріями зросла з 60 до 97%, звіти готові до відкриття зміни, а не через добу. Ручна праця скоротилася з трьох операторів до вибіркової перевірки близько 2% чеків — швидше й без втрат.

Змінився й клас відмов: замість рядка, мовчки загубленого під час розбору, з’являється запис у черзі з явною причиною та структурою чека. На ваговому товарі й нестандартних скороченнях точність нижча — такі позиції йдуть на ручну верифікацію, а не викривляють звітність.

Способи аналізу чеків: пакет чи потік

Вибір між режимами розбору визначає не обсяг чеків, а те, наскільки швидко результат потрібен в обліковій системі. Пакетна обробка чеків забирає вивантаження за закритий період і розбирає його цілком, потокова — приймає чек у момент покупки й віддає дані майже одразу.

Ядро розпізнавання в обох випадках одне, різняться лише момент запуску та вимоги до підключення до облікової системи.

На практиці обирають не «або», а порядок: потік закриває операційні завдання, пакет — звіряння й добір пропущеного. Нижче — три робочі варіанти й те, чим кожен обмежений.

Варіанти розбору та їх обмеження

Варіант Коли підходить Обмеження
Пакетне вивантаження за період Зміна закривається цілком, затримка результату допустима Дані з’являються лише після вивантаження; збійну позицію доводиться шукати й перезапускати окремо
Потокова обробка за подією Рішення потрібне в момент покупки: контроль ліміту, звіряння, підказка оператору Потребує стійкого каналу від касового вузла; у разі обриву події накопичуються й потребують повторної доставки
Гібрид: потік плюс пакетне звіряння Потрібні і швидкість, і гарантія повноти за зміну Подвійна логіка зіставлення та захист від дублів під час повторної доставки

Режими розбору даних обирають за темпом роботи облікової системи: там, де зміна закривається раз на добу, пакет втрачає майже нічого, а потік ускладнює контур без користі. Якщо ж рішення ухвалюються в момент покупки, без потокової обробки потрібної затримки не отримати.

Етапи роботи: від аудиту даних до передачі системи

Порядок кроків вибудувано так, щоб кожен наступний спирався на перевірений результат попереднього: вузькі місця спливають у середині робіт, а не на прийманні, коли переробка коштує найдорожче.

  1. Аудит вибірки чеків. Дивимося, що реально надходить з кас і з застосунку: знімки під кутом, м’яті та вицвілі чеки, різні формати друку. Рахуємо частку вибірки, придатну до розбору без ручної правки.
  2. Схема даних і розмітка прикладів. Фіксуємо обов’язкові поля — дата, сума, позиції, знижки — і вручну розмічаємо кілька сотень чеків, включно з незручними. Ця розмітка стає еталоном для всіх наступних версій.
  3. Налаштування правил розбору. Типові випадки закриваємо правилами й словниками товарних груп, нетипові відводимо в модель. Так рішення системи зрозуміле, а помилку правимо без повного перенавчання.
  4. Перевірка на реальних даних. Прогін на відкладеній вибірці з точністю за кожним полем окремо: де плутається вага з ціною, де губиться рядок. Зведена цифра за чеком такі провали приховує.
  5. Донавчання на спірних прикладах. Чеки з низькою впевненістю розбираємо вручну й додаємо до набору — точність зростає саме там, де вона просідала.
  6. Приймання за узгодженими метриками. Перевіряємо на вибірці, яку замовник збирає сам і нам заздалегідь не показує. Поріг не досягнуто — повертаємося до правил, а не «дотягуємо» показник.
  7. Передача системи замовнику. Віддаємо код, конфігурації правил, схему даних, інструкції щодо спірних чеків і журнал метрик; навчаємо команду й залишаємося на зв’язку щодо інцидентів.

Артефакти передачі: модель, правила, документація

Навчена модель без супровідного пакета — це чорна скринька, який через пів року нікому донавчити. Тому передача фіксується як комплект артефактів: щодо кожного відомо, хто за нього відповідає, чим він оновлюється і як перевірити, що він ще працює.

  • Схема потоку даних — шлях чека від знімка до запису в обліковій системі: де він потрапляє в обробку, де зберігається, у який момент розпізнане значення вважається підтвердженим, а де йде на ручний розбір.
  • Навчена модель розбору позицій — з переліком класів товарів, на яких вона налаштовувалася, і межами застосовності: м’ятий чек, слабке освітлення, нестандартний друк.
  • Правила валідації даних — обов’язкові поля, перевірка контрольної суми, формат дати й суми, а також поведінка в разі розбіжності: відхилити, позначити чи надіслати оператору.
  • Регламент контролю якості — яка частка чеків іде на ручне звіряння, за яким порогом точності розбір вважається придатним і що запускається, коли поріг просідає.
  • Ролі та доступи — хто бачить вихідні зображення, хто править розмітку, хто змінює правила валідації і хто лише читає звіти; права заведені в системі, а не на словах.
  • Документація щодо системи — інструкції для операторів і адміністраторів, опис довідників, журнал змін моделі та порядок відкату до попередньої версії.

Це не звіт про виконану роботу, а робочий комплект: за ним ваш фахівець вводить систему в експлуатацію, а новий інженер повторює налаштування без нас.

Кейс: що змінилося після впровадження

До впровадження

У мережі продуктових магазинів Роздрібна мережа дані з паперових чеків переносили в таблиці вручну: оператори вводили позиції й звіряли їх із довідником товарів.

За потоку в кілька тисяч чеків на день партія закривалася приблизно за шість годин, частка помилкових позицій сягала 18%, а кожен четвертий рядок доводилося правити руками — найчастіше через вагові товари, знижкові рядки та злиплі символи на стрічці.

Що змінили

Зібрали конвеєр обробки: знімок чека проходить передобробку — вирівнювання, відсікання фону, підвищення контрасту, — потім розпізнаються рядки, і кожна позиція зіставляється з довідником за артикулом, штрихкодом і ваговим префіксом.

Підсумок і податки перевіряються правилами: якщо сума не сходиться або впевненість розпізнавання нижча за поріг, рядок іде оператору, а не у звіт.

Спрацьоване правило й версія моделі фіксуються в журналі, тому спірну позицію можна розібрати й переперевірити без повторного проходу всієї партії.

Частка помилкових позицій знизилася з 18% до 1,5%, партія того ж обсягу обробляється за 25–30 хвилин замість шести годин, ручне доопрацювання скоротилося з чверті рядків до 4%.

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

Що робити, якщо касові дані вже збираються в обліковій системі?

Касові дані вже лежать в обліковій системі — отже, окрема інтеграція з касами не потрібна: достатньо читати те, що там уже є.

Контур аналізу будується поряд із робочою базою, а не поверх неї: облік продовжує закривати зміни й друкувати звіти, а вивантаження касових даних іде в окреме сховище, де з ним працює модель аналізу чеків.

Забирати дані краще з шару обміну або з репліки 1С, а не з бойової бази в момент закриття зміни. Вивантаження йде порціями за розкладом, інкрементально — за ідентифікатором зміни або чека, зі збереженням вихідних сум, знижок і позицій.

Повторний запуск не повинен створювати дублі: ключем стає номер чека в зв’язці з касою та торговою точкою.

Співіснування з поточними звітами забезпечується тим, що ми не чіпаємо схему регістрів і довідників. Аналітика живе у своїй вітрині, бухгалтерські та управлінські звіти залишаються там, де були, і жоден із них не починає залежати від нашого контуру.

На першому етапі обов’язкова перевірка цілісності даних: чи сходиться число чеків і сума виручки за зміною з підсумками закриття, чи немає розривів у нумерації, чи коректно рознесено повернення й анульовані позиції.

Розбіжності розбираємо до запуску — інакше модель навчиться на неповній вибірці й висновки будуть зміщені.

Часті питання щодо якості та даних

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

Наскільки стійке розпізнавання на м’ятих і вицвілих чеках?

Модель навчається на ваших кадрах, а не на ідеальних сканах: у розмітку відбираються складні випадки — косий кут, слабке світло, зім’ятий папір.

Якість вимірюємо часткою впевнено розпізнаних позицій і сум, а сумнівні рядки йдуть в окремий потік на ручну перевірку, щоб не викривляти підсумкові агрегати.

Як обробляються змішані формати — фото, скани, вивантаження з касового ПЗ?

Усі джерела приводимо до єдиної схеми запису: спільний довідник товарних позицій, нормалізація одиниць вимірювання, зіставлення торгових точок і кас. Розбіжності між форматами відловлюємо на етапі завантаження — інакше одна позиція рахується двічі й зведені звіти втрачають сенс.

Що з чутливими полями чека — ПІБ, телефоном, платіжними даними?

Такі поля маскуються або хешуються до запису в сховище, аналітиці дістаються лише знеособлені агрегати за категоріями й періодами. Доступ до вихідних зображень обмежений окремою роллю та журналюється — під час перевірки видно, хто і коли відкривав конкретний чек.

Який мінімальний обсяг вибірки потрібен для старту?

Для першої перевірки гіпотези достатньо кількох тисяч чеків — важливіше не кількість, а покриття: ключові товарні категорії, різні умови знімання, кілька торгових точок.

На такій вибірці вже видно частку розпізнаних позицій і якість зведеної аналітики, далі модель розширюється на повний потік.

Обговоримо задачу: що потрібно для оцінки

Щоб повернутися з оцінкою строків і планом робіт, нам не потрібен повний доступ до інфраструктури та готове технічне завдання. Достатньо вихідних даних, які у вас уже є — за ними видно обсяг, класи складності та вузькі місця майбутнього рішення.

  • Зразки чеків — 100–300 штук у тому вигляді, як вони потрапляють в обробку. Потрібні різні класи: згасла термопечать, м’яті та косо зняті квитанції, різні моделі кас.
  • Обсяг і ритм: скільки чеків на місяць, який піковий потік, чи є сезонні сплески.
  • Список полів для вилучення: номенклатура, сума, ПДВ, дата, номер фіскального документа, QR. Позначте критичні поля та ті, де допустиме ручне заповнення.
  • Маршрут документа: звідки надходить файл і куди має потрапити результат — таблиця, облікова система, файл заданого формату.
  • Вимоги до точності та допустима частка ручної перевірки спірних позицій.
  • Обмеження за контуром: де дозволено зберігати й обробляти дані — закритий сервер, хмара.
  • Що вже пробували і на чому зупинилися.

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

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142