Штучний інтелект в облікових системах

Теми машинного навчання та нейромереж далеко не нові, і піднімались з самого початку комп'ютерної ери. Перцептрони, розпізнавання образів, штучний інтелект, симуляція реальності бурхливо обговорювались у шестидесяті роки двадцятого сторіччя. Безліч статей, а потім підтягнулась і фантастика - Станіслав Лем з його "Казками роботів", і Стругацькі, і Днєпров з його Суемою. Все це було перечитано ще в підлітковому віці.
 
Поступово стало зрозуміло, що величезні шафи гудуть, крутять магнітні стрічки, гуркотять перфокартами, споживають мегавати, але задачі штучного інтелекту не тягнуть. І в семидесяті роки тема згасла. Потім був невеликий сплеск цікавості в кінці вісімдесятих років, але з початком дев'яностих викладачі в інституті до цієї теми вже відносились з певним гумором, приблизно так, як до термоядерного синтезу. Тобто, можливо, але колись потім.

1987 рік, мені 15 років. Через знайомого дізнаюсь, що інший наш спільний знайомий "паяє комп'ютер". Про "комп'ютери" я на той момент мав лише приблизне уявлення (інша річ, приймачі, підсилювачі та магнітофони). І на моє наївне запитання, а для чого він йому, мені було сказано "ти що!!! з ним же спілкуватись можна!" Дивна штука - життя. Вже через рік я написав свою першу програму. А потім закрутилось...

Отже пройшло всього лише 38 років, і з комп'ютером дійсно стало можна спілкуватись. ChatGPT не дасть збрехати.

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

Оскільки останні 27 років я займаюсь розробкою саме облікових систем (бази даних, ООП і все таке), то стало цікаво, що можна зробити за допомогою машинного навчання на цьому напрямку. Які задачі є доволі нагальними, але до сих пір ефективно не вирішені? Перш за все, прогнозування попиту. По друге - ціноутворення. Поки що на думку нічого іншого не спадає. Якщо в когось є цікаві ідеї, із задоволенням розглянемо та обговоримо. Пишіть під статею ваші відгуки, зауваження, запитання.

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

Була проведена певна експериментально-дослідницька робота з прогнозування попиту по тижнях. Точність передбачень - 92 відсотки. Що доволі точно.
Хід робіт тривав наступним чином.
Спершу була спроба побудувати функцію передбачення за допомогою стандартної бібліотеки ML.Net. Алгоритм SDCA був відкинутий одразу, бо він будує лінійні функції, а в нас із попитом нічого лінійного бути не може. Були спроби використати алгоритм FastTree, після декількох годин досліджень та експериментів, стало зрозуміло, що тема набагато більш складна і потребує машинного навчання важкого класу. Отже нам потрібен Torch. Бібліотека, яка створює нейромережу, тренує її, і на виході ми отримуємо модель, яка може прогнозувати. 

Такий план.

Вантажимо TorchSharp (обгортка для Torch для використання в .Net).


Тепер потрібно підготувати набір даних. Маємо десять мільйонів  записів з продажами певних товарів за 3 роки для певної торгової мережі.
Декілька днів експериментів з'ясували наступне.
1. Дані по продажах по днях дуже "шумлять". Тобто від дня до дня попит на той самий товар може відрізнятися в декілька разів навіть сукупно по мережі, не кажучі вже про окрему торгову точку.
2. Треба створити різні параметри, щоб нейромережа почала відчувати залежності між параметрами. Наприклад, була спроба ввести параметр день тижня, а також ознаку, чи є цей день вихідним та інше.
3. Глибина нейромережі в два-три шари недостатня для виявлення залежностей.

Для подолання цих проблем були здійснені наступні кроки.
1. Щоб знизити розкид значень, берем потижневий період. Дані по тижнях стають біль рівними, і коливання попиту на цих періодах згладжуються. Також були відкинуті "аномальні" викиди, через некоректність деяких даних.
2. Шляхом експериментів були підібрані параметри, які оцінює нейромережа - це Id товару, кількість продажів за тиждень, всі параметри нормалізовані, щоб уникнути великих коливань значень.
3. Виявилось, що для точних передбачень нейромережа повинна  мати на вході 256 нейронів, та декілька шарів згортання.

Попередні висновки.
1. Щоб нейромережа передбачала більш-менш точно (для практичного застосування), потрібні величезні обсяги даних - десятки або сотні мільйонів записів по продажах. І за бажано років за п'ять. Також бажано додати параметр свят, щоб нейромережа знала, коли, в які дні відбувались певні свята, бо є свята в певні календарні дати, а є плаваючі. Тоді нейромережа відчує чітко відчує зв'язок між періодом часу (фактично номером тижня), і попитом.
2. Деякі задачі (наприклад, рекомендації по розпродажах товарів з метою розвантаження складів) вирішуються по доволі точних розрахунках і для цього непотрібні нейромережі.
3. Нейромережі - це нелінійні функції. Які спроможні приймати багато аргументів і вибудовувати між їхніми комбінаціями нелінійні зв'язки. І для побудови таких функцій (тренування нейромереж) потрібні величезні обсяги даних. Тому це може добре працювати у великих роздрібних мережах де накопичився великий обсяг даних. Але для конкретного магазину навряд чи це буде доцільним, магазин просто стільки не наторговує. Для окремого магазину можна було б прогнозувати щось більш узагальнене, ніж попит на конкретні товари, наприклад, обсяг виручки (варто ще ввести параметр інфляції), але чи потрібна така задача? Навряд чи. Але можна :).
4. Нейромережа - це не штучний інтелект. Це один з алгоритмів "машинного навчання". А "машинне навчання" - це спосіб виявлення залежностей та побудови нелінійних функцій на великих обсягах даних. І тут ключове "на великих обсягах". Які обсяги можна вважати "великими" для дійсно якісного навчання? Це десятки мільйонів прикладів. Яка бугхалтерія якого підприємства може похвалитись десятками мільйонів транзакцій? Хіба що великі американські банки. Якщо це навіть велика торгова мережа на всю Україну - можна розраховувати на обмежене коло задач, які будуть вирішені не "на відмінно", а хоча б "на задовільно".
5. Прозорість прийняття рішень. Для бізнесу дуже важливо розуміти поведінку системи. Чому, на підставі яких даних та міркувань система приймає певні рішення. Якщо система працює по зрозумілих алгоритмах, то її завжди легко перевірити, і зрозуміти, чи є така поведінка передбачуваною. Наприклад, зведення балансу, або розрахунок амортизації. Прості формули, все зрозуміло. А от якщо нейромережа порахує вам потребу в закупівлі морозива на наступний тиждень, на підставі яких міркувань вона прийняла таке рішення? Чи можна цьому рішенню довіряти? Велике питання.
Ось такі попередні міркування.
Файл з нейромережою додаю, можливо комусь буде цікаво поекспериментувати.

Andriy Kravchenko

Admin, Writer, File Uploader

26.05.2025 23:20:29

Прикріплені файли

An error has occurred. This application may no longer respond until reloaded. An unhandled exception has occurred. See browser dev tools for details.