mirror of
https://github.com/olehomelchenko/bi-detective.git
synced 2026-06-23 22:47:46 +00:00
133 lines
18 KiB
JavaScript
133 lines
18 KiB
JavaScript
// Питання вікторини, описи інсайтів і підсумкові тексти.
|
|
// Це файл для редагування контенту гри.
|
|
|
|
const QUIZZES = {
|
|
overview: {
|
|
prompt: 'Подивись на повний таймлайн. Чи незвичним є падіння жовтень → листопад?',
|
|
insightKey: 'yoyPositive',
|
|
options: [
|
|
{ text: 'Ні — торік у листопаді було подібне падіння. Це повторюваний сезонний патерн, і листопад 2023 насправді має більше рейсів, ніж листопад 2022.', correct: true,
|
|
feedback: 'Правильно. Листопад 2023 має на +7,6% більше рейсів, ніж листопад 2022. Падіння жовтень → листопад трапляється щороку, коли холоднішає. Завжди питай: «Порівняно з чим?»' },
|
|
{ text: 'Так — цьогорічне падіння різкіше, ніж торішнє, щось не так', correct: false,
|
|
feedback: 'Порівняй цифри листопада: листопад 2022 мав ~330 тис. рейсів, листопад 2023 має ~355 тис. рейсів. Це зростання, а не спад. Падіння жовтень → листопад є сезонним і повторюється щороку.' },
|
|
{ text: 'Важко сказати — потрібно більше років даних, щоб бути певним', correct: false,
|
|
feedback: 'Більше років допомогло б, але навіть один попередній листопад показує той самий патерн. І листопад 2023 насправді має більше рейсів, ніж листопад 2022 — діяльність зростає рік до року.' },
|
|
]
|
|
},
|
|
dayofweek: {
|
|
prompt: 'Четвер просів зовсім трохи (-1%). Чи дає цей день якусь підказку?',
|
|
insightKey: null, lessonKey: 'dayofweek',
|
|
options: [
|
|
{ text: 'Ні — у жовтні було 4 четверги, а в листопаді 5. Сирі суми вводять в оману, бо в місяцях різна кількість днів кожного дня тижня.', correct: true,
|
|
feedback: 'Правильно! Це календарний артефакт. Жовтень 2023 мав 4 четверги, листопад 2023 — 5. Якщо нормалізувати на день, кожен день тижня просів на 20-40%. Завжди перевіряй, чи мають твої періоди порівняння однакову структуру.' },
|
|
{ text: 'Так — четвер тримається стійко, можливо, в четвер відбувається щось особливе', correct: false,
|
|
feedback: 'Полічи дні: жовтень 2023 мав 4 четверги, листопад 2023 — 5. Більше днів = більше рейсів, тому четвер виглядає стабільним. Якщо рахувати на один четвер, рейсів насправді стало менше на ~30%, як і в інші дні.' },
|
|
{ text: 'Розкид між днями тижня свідчить, що день тижня — важливий фактор спаду', correct: false,
|
|
feedback: 'Розкид — переважно календарний артефакт: різні місяці мають різну кількість кожного дня тижня. Якщо нормалізувати (рейси на день), падіння більш-менш рівномірне — 20-40%.' },
|
|
]
|
|
},
|
|
hourly: {
|
|
prompt: 'Чи показує погодинний розподіл, що саме змінилося між жовтнем і листопадом?',
|
|
insightKey: null, lessonKey: 'hourly',
|
|
options: [
|
|
{ text: 'Ні — та сама форма кривої, лише нижча. Денний патерн не змінився; впав тільки обсяг.', correct: true,
|
|
feedback: 'Правильно. Коли дві криві мають однакову форму, час доби не пояснює зміну. Це зсув обсягу, а не зсув поведінки. Шукай виміри, де змінюється сама форма.' },
|
|
{ text: 'Вечірні рейси обвалилися — менше світлового дня може виганяти людей із потоку', correct: false,
|
|
feedback: 'Листопадова крива нижча всюди, не тільки ввечері. Обидві криві мають однакову форму — піки, западини, усе однакове. Жодного специфічного вечірнього обвалу немає.' },
|
|
{ text: 'Просіли пікові години — можливо, більше людей працює дистанційно', correct: false,
|
|
feedback: 'Ранкові й вечірні пікові години чітко видно і в листопаді, просто нижчими. Форма ідентична жовтню — патерн виїздів не змінився.' },
|
|
]
|
|
},
|
|
vehicletypes: {
|
|
prompt: 'Чи пояснює розбивка за класом техніки падіння рейсів?',
|
|
insightKey: null, lessonKey: 'vehicletypes',
|
|
options: [
|
|
{ text: 'Ні — обидва класи техніки впали разом. Цей вимір не пояснює варіацію.', correct: true,
|
|
feedback: 'Правильно. Коли всі значення у вимірі рухаються в одному напрямку приблизно з однаковою силою, цей вимір не пояснює зміну. Шукай виміри, де значення розходяться.' },
|
|
{ text: 'Легка техніка тримається краще — проблема саме у важкій', correct: false,
|
|
feedback: 'Обидва класи просіли подібно (-30% до -34%). Невелика різниця не пояснює загального обвалу.' },
|
|
]
|
|
},
|
|
duration_buckets: {
|
|
prompt: 'Найдовші рейси (60+ хв) обвалилися на -58%, а короткі — лише на -23%. Що це підказує?',
|
|
insightKey: 'longRidesCollapse',
|
|
options: [
|
|
{ text: 'Замовники, які беруть довгі рейси, перестали їх замовляти. Якщо вони ще й роблять більше рейсів, ця зміна композиції може пояснити загальне падіння середнього часу обороту.', correct: true,
|
|
feedback: 'Правильно. Довгі рейси зникають непропорційно. Це підказка, що зі складу вибуває певна група замовників — ті, що замовляють надовго. Це і є механізм падіння середньої тривалості. Подивись на вкладку «Замовники», щоб побачити, хто це.' },
|
|
{ text: 'Холодна погода змушує всіх обертатися швидше, тому довгі рейси скорочуються найбільше', correct: false,
|
|
feedback: 'Якби холод укорочував усі рейси однаково, падіння було б рівномірним по всіх кошиках. Але короткі рейси майже не просіли (-23%), а довгі обвалилися (-58%). Працює щось інше, не тільки погода.' },
|
|
{ text: 'Це просто шум — у довгих рейсах більша варіація, тому вони сильніше коливаються', correct: false,
|
|
feedback: 'У кошику 60+ хв понад 10 000 рейсів — це не шум. Падіння на -58% — сильний сигнал. Градієнт від -23% до -58% по кошиках розповідає чітку історію: популяція тих, хто бере довгі рейси, скоротилася.' },
|
|
]
|
|
},
|
|
stations: {
|
|
prompt: 'Чи можна вказати конкретні логістичні вузли, через які впала загальна цифра?',
|
|
insightKey: null, lessonKey: 'stations',
|
|
options: [
|
|
{ text: 'Ні — кожен топовий вузол просів на 25-45%. Причина системна, а не локальна.', correct: true,
|
|
feedback: 'Правильно. Коли патерн рівномірний по всіх значеннях, цей вимір не пояснює варіацію. Перебирати 800+ вузлів по одному — змарновані зусилля.' },
|
|
{ text: 'Кілька вузлів витягли більшу частину спаду — слід дослідити саме їх', correct: false,
|
|
feedback: 'Подивись на графік: жоден топовий вузол не виглядає особливо. Усі просіли значно. Жоден окремий вузол не виділяється як причина. Спад розподілений рівномірно.' },
|
|
{ text: 'Найсильніше просіли вузли в найгарячіших ділянках — це і є зачіпка', correct: false,
|
|
feedback: 'Усі вузли просіли на схожий відсоток. Причина системна — те саме, що впливає на всі локації.' },
|
|
]
|
|
},
|
|
requesters_reveal: {
|
|
prompt: 'Частка передових упала з 33% до 27%. Що показує розбивка за типом замовника?',
|
|
insightKey: 'casualDropMore',
|
|
options: [
|
|
{ text: 'Падіння рейсів сконцентроване в передових (-44%) — тилові відносно стабільні (-27%). Композиція замовників значно змістилася.', correct: true,
|
|
feedback: 'Правильно. Рейси передових впали на -44%, а тилових лише на -27%. Заголовок «рейсів менше на 32%» приховує, що більшість шкоди — в одному сегменті. Цей зсув композиції тягне за собою наслідки для будь-якої метрики, що відрізняється між сегментами.' },
|
|
{ text: 'Обидві групи просіли значно, тому це загальносистемна проблема', correct: false,
|
|
feedback: 'Подивись на темпи: -44% проти -27% — велика різниця. Передові просіли майже вдвічі швидше. Загальна цифра приховує дуже нерівномірне падіння по групах.' },
|
|
{ text: 'Тилові тягнуть спад, бо їх більше', correct: false,
|
|
feedback: 'Тилових більше в абсолютних числах, але їхній відсоток падіння значно менший. Сегмент передових скоротився набагато драматичніше, що змінило загальну композицію.' },
|
|
]
|
|
},
|
|
requesters_mix: {
|
|
prompt: 'Композиція замовників змістилася. Що це означає для метрики середнього часу обороту?',
|
|
insightKey: 'mixShift',
|
|
options: [
|
|
{ text: 'Передові беруть значно довші рейси. Якщо їхня частка скоротилася з 33% до 27%, загальний середній час обороту впаде, навіть якщо жодна група не змінила своєї поведінки.', correct: true,
|
|
feedback: 'Правильно! Коли композиція змінюється, агреговані метрики зміщуються, навіть якщо поведінка жодної групи не змінилася. Це і є ключ до падіння середнього часу обороту. Подивись на вкладку «Час обороту», щоб побачити це в дії.' },
|
|
{ text: 'Зміна композиції замала (6 п.п.), щоб помітно вплинути на середнє', correct: false,
|
|
feedback: 'Передові в середньому ~24 хв на рейс проти ~12 хв у тилових. Зсув на 6 п.п. у групи, яка обертається вдвічі довше, дає великий ефект на зважене середнє. Перевір математику на вкладці «Час обороту».' },
|
|
{ text: 'Час обороту і кількість рейсів — окремі метрики; зсув композиції впливає тільки на кількість', correct: false,
|
|
feedback: 'Зсув композиції впливає на БУДЬ-ЯКУ метрику, що відрізняється між групами. Оскільки передові обертаються вдвічі довше за тилових, зміна частки передових прямо змінює середній час обороту.' },
|
|
]
|
|
},
|
|
duration_paradox: {
|
|
prompt: 'Загальний час обороту впав на -11,9%, але подивись на кожну групу окремо. Що відбувається?',
|
|
insightKey: 'durationParadox',
|
|
options: [
|
|
{ text: 'Жодна група сама по собі не змінилася сильно, але загальне середнє впало, бо передові (які обертаються довше) стали меншою часткою композиції', correct: true,
|
|
feedback: 'Правильно! Це парадокс Сімпсона. Тилові (~73% рейсів у листопаді) майже не змінилися (-4,8%), передові просіли деякою мірою (-13,2%), а загальне впало непропорційно сильно, бо група «довгих» стиснулася в композиції.' },
|
|
{ text: 'Холод змушує всіх обертатися швидше — спад реальний у всіх групах', correct: false,
|
|
feedback: 'Якби холод укорочував рейси рівномірно, обидві групи показали б подібне падіння. Але тилові просіли лише на -4,8%, а загальне — на -11,9%. Цей розрив погодою не пояснити.' },
|
|
{ text: 'Час обороту просів пропорційно по всіх групах — нічого незвичайного', correct: false,
|
|
feedback: 'Порівняй цифри: тилові -4,8%, передові -13,2%, загальне -11,9%. Якщо тилових 73%, то загальне мало б бути ближчим до -4,8%. Загальне тягне вниз саме зміна композиції, а не індивідуальна поведінка.' },
|
|
]
|
|
},
|
|
};
|
|
|
|
const OBSERVATIONS = [
|
|
{ key: 'yoyPositive', text: 'Рейси листопада насправді ВИЩІ, ніж торік (+7,6%) — діяльність зростає', tag: 'observation' },
|
|
{ key: 'longRidesCollapse', text: 'Довгі рейси зникли непропорційно (-58% для 60+ хв проти -23% для коротких)', tag: 'observation' },
|
|
{ key: 'casualDropMore', text: 'Падіння рейсів сконцентроване в передових (-44%) — тилові відносно стабільні (-27%)', tag: 'observation' },
|
|
{ key: 'mixShift', text: 'Передові скоротилися з 33% до 27% від усіх рейсів — композиція замовників змістилася', tag: 'observation' },
|
|
{ key: 'durationParadox', text: 'Час обороту в кожній групі майже не змінився, але загальне середнє впало значно більше — парадокс Сімпсона', tag: 'observation' },
|
|
];
|
|
|
|
const CONCLUSIONS = [
|
|
{ key: 'conclusionSeasonal', text: 'Падіння рейсів — звичайна сезонність, а не операційна проблема', tag: 'conclusion' },
|
|
{ key: 'conclusionParadox', text: 'Падіння часу обороту — ефект композиції (парадокс Сімпсона), а не реальна зміна поведінки', tag: 'conclusion' },
|
|
];
|
|
|
|
// Підписи «глухих кутів» для підсумкового екрану
|
|
const LESSON_NAMES = {
|
|
dayofweek: 'Сирі суми по днях тижня вводять в оману — нормалізуй на календарну структуру',
|
|
hourly: 'Однакова форма погодинної кривої — зсув обсягу, а не патерну',
|
|
vehicletypes: 'Класи техніки падають разом — не причина',
|
|
stations: 'Усі вузли просіли однаково — системно, не локально',
|
|
};
|