mirror of
https://github.com/olehomelchenko/bi-detective.git
synced 2026-06-24 00:07:47 +00:00
144 lines
19 KiB
JavaScript
144 lines
19 KiB
JavaScript
// Quiz questions, observation/conclusion definitions, and dead-end lesson labels.
|
|
// Ported from BUS220 BI Detective (Divvy bike-share) to ХАРТІЯ brigade-efficiency scenario.
|
|
// Internal keys (yoyPositive, casualDropMore, etc.) preserved for game.js compatibility.
|
|
|
|
const QUIZZES = {
|
|
overview: {
|
|
prompt: 'Поглянь на повний таймлайн ефективності та обсягу. Зростання з 62% до 71% — це дійсно покращення?',
|
|
insightKey: 'yoyPositive',
|
|
options: [
|
|
{ text: 'Подивись на минулорічний листопад — ефективність тоді була ~62%, як і у жовтні цього року. Цьогоріч уперше з\'явився такий стрибок. Стрибок справжній — питання, що його викликало.', correct: true,
|
|
feedback: 'Правильно. Минулого листопада ефективність була типова (~62%). Ця листопадова цифра 71% — справді нове явище. Тепер потрібно з\'ясувати, *чому*. Завжди питай: *"порівняно з чим?"*' },
|
|
{ text: 'Так — це чисте покращення в роботі. Підрозділи стали ефективнішими.', correct: false,
|
|
feedback: 'Не поспішай. *"Стало ефективніше"* — це остання з можливих відповідей, яку треба перевіряти, не перша. Спочатку виключи: сезонність, зміну композиції, шум, інший знаменник. Тут є дані за минулий рік — використай їх.' },
|
|
{ text: 'Ні, скоріше за все це сезонна аномалія — кожного листопада ефективність зростає.', correct: false,
|
|
feedback: 'Подивись на минулий листопад — там ефективність була ~62%, не 71%. Цей листопад — *перший*, де так високо. Сезонність не пояснює.' },
|
|
]
|
|
},
|
|
|
|
dayofweek: {
|
|
prompt: 'Чому в листопаді операцій менше? Може, за днями тижня щось видно?',
|
|
insightKey: null, lessonKey: 'dayofweek',
|
|
options: [
|
|
{ text: 'Ні — обидва місяці мають різну кількість буднів і вихідних. У листопаді 2023 на один четвер більше, ніж у жовтні; це просто календарний артефакт.', correct: true,
|
|
feedback: 'Правильно! Це календарний артефакт. Жовтень 2023 мав інший набір днів тижня, ніж листопад. Якщо нормалізувати на кількість днів кожного типу — падіння плюс-мінус рівномірне. Завжди перевіряй: чи однакова структура в порівнюваних періодах.' },
|
|
{ text: 'Так — у середу/четвер виконують більше операцій, а в листопаді цих днів виявилось менше', correct: false,
|
|
feedback: 'Поглянь на дні: у листопаді одних днів тижня більше, інших менше — порівняно з жовтнем. Це календарна аномалія, не змістовний патерн.' },
|
|
{ text: 'Це нічого не пояснює — потрібно дивитись інші розрізи.', correct: false,
|
|
feedback: 'Частково так, але календарну структуру варто завжди перевіряти першою — якраз щоб не списати на змістовний фактор те, що пояснюється календарем.' },
|
|
]
|
|
},
|
|
|
|
hourly: {
|
|
prompt: 'А за часом доби — що змінилось між жовтнем і листопадом?',
|
|
insightKey: null, lessonKey: 'hourly',
|
|
options: [
|
|
{ text: 'Нічого — форма крива та сама, просто рівень нижчий. Денний пік на тих самих годинах, нічна тиша так само. Це зміна обсягу, не патерну.', correct: true,
|
|
feedback: 'Правильно. Коли дві криві ідентичні за формою і відрізняються лише висотою — час доби нічого не пояснює. Це чиста зміна обсягу, не зміна поведінки. Шукай розрізи, де *форма* змінюється.' },
|
|
{ text: 'Активність вечорами впала — мабуть, через темряву раніше', correct: false,
|
|
feedback: 'Подивись уважніше: листопадова крива нижча по всіх годинах, не лише ввечері. Денні піки та нічні мінімуми — ті самі. Темрява не пояснює рівномірне падіння.' },
|
|
{ text: 'Ранкові операції зросли — нові тактики', correct: false,
|
|
feedback: 'Ранкові години в листопаді нижчі за жовтневі в абсолюті, як і всі інші. Форма та сама, ніщо не зросло.' },
|
|
]
|
|
},
|
|
|
|
biketypes: {
|
|
prompt: 'Розріз за категоріями операцій. Що тут видно?',
|
|
insightKey: null, lessonKey: 'biketypes',
|
|
options: [
|
|
{ text: 'Кількість операцій у кожній категорії впала — окрім підготовчих (тренування, логістика), які навпаки виросли. Категорії змінились по-різному.', correct: true,
|
|
feedback: 'Правильно. Це і є ключ — категорії рухаються в різні боки. Тренування і логістика — *виросли* в обсязі. Розвідка, вогневе ураження, оборонні дії — *впали*. Це не просто зменшення активності — це структурна зміна. Іди далі: подивись частки.' },
|
|
{ text: 'Усі категорії впали приблизно однаково — це не пояснює зміну ефективності', correct: false,
|
|
feedback: 'Подивись точніше — тренування і логістика *зросли* в кількості, не впали. Це важлива асиметрія.' },
|
|
{ text: 'Оборонні дії впали найсильніше, але це звичайна сезонність', correct: false,
|
|
feedback: 'Падіння оборонних — справжнє і дуже сильне (-66%). Але «звичайна сезонність» — це твоя інтерпретація без перевірки. Спитай: яка частка кожної категорії була до і стала після?' },
|
|
]
|
|
},
|
|
|
|
duration_buckets: {
|
|
prompt: 'Розріз за масштабом операцій (мала / середня / велика). Чи пояснює це різницю?',
|
|
insightKey: 'longRidesCollapse',
|
|
options: [
|
|
{ text: 'Ні — обсяг по всіх масштабах впав плюс-мінус рівномірно. Масштаб не визначає ефективність на дашборді — рухаються всі бакети разом.', correct: true,
|
|
feedback: 'Правильно. Однорідне падіння по всіх масштабах — означає, що масштаб *не* пояснює зміни. Мала, середня, велика — усі впали приблизно однаково. Шукай розрізи, де частки рухаються по-різному.' },
|
|
{ text: 'Великі операції впали найбільше — отже, вони пояснюють зміну', correct: false,
|
|
feedback: 'Подивись числа: всі три бакети впали приблизно на 30-40%. Жодна група не виокремлюється. Якщо однорідно — нічого не пояснюється.' },
|
|
{ text: 'Малі операції зросли — у листопаді більше дрібних завдань', correct: false,
|
|
feedback: 'Ні: у листопаді *усіх* масштабів менше, в тому числі малих. Падіння рівномірне.' },
|
|
]
|
|
},
|
|
|
|
stations: {
|
|
prompt: 'А за підрозділами? Чи виокремлюється якийсь один?',
|
|
insightKey: null, lessonKey: 'stations',
|
|
options: [
|
|
{ text: 'Ні — у всіх підрозділів обсяг операцій впав на ~30-40%. Жоден не виокремлюється — падіння системне, не локальне.', correct: true,
|
|
feedback: 'Правильно. Коли всі підрозділи рухаються в один бік приблизно однаково — причина системна, не в окремому підрозділі. Не варто шукати "винного" — варто шукати фактор, що вплинув на всіх.' },
|
|
{ text: '1 БТГр впала найсильніше — там проблема', correct: false,
|
|
feedback: 'Подивись на діаграму: відмінності між підрозділами невеликі (5-10 п.п.). Усі впали приблизно однаково. Точкове "хто винен" — невірний інстинкт тут.' },
|
|
{ text: 'Інженерно-сапна рота тримається — у них кращі практики', correct: false,
|
|
feedback: 'Усі підрозділи впали в межах +/- 10 п.п. одного значення. Локальні відмінності є, але вони шумові, не визначальні.' },
|
|
]
|
|
},
|
|
|
|
riders_reveal: {
|
|
prompt: 'Поглянь на 2-сегментний розклад: підготовчі (тренування+логістика) проти бойових (розвідка+вогневе ураження+оборонні). Що сталося?',
|
|
insightKey: 'casualDropMore',
|
|
options: [
|
|
{ text: 'Бойові операції різко скоротились (з ~85% до ~50%); підготовчі зросли (з ~15% до ~50%). Структура операційного навантаження кардинально змінилась.', correct: true,
|
|
feedback: 'Правильно. Бойові операції в листопаді зменшились більше ніж удвічі за абсолютним обсягом, при цьому частка впала з 85% до 50%. Підготовчі натомість виросли. Заголовок "ми ефективніші" — насправді "ми робимо менше складного". Тепер питання: чи кожен сегмент став ефективнішим, чи цифра рухається лише через зміну складу?' },
|
|
{ text: 'Обидва сегменти впали приблизно однаково — це загальне зниження активності', correct: false,
|
|
feedback: 'Подивись на частки: бойові з 85% до 50% — це втрата більш ніж третини. Підготовчі натомість *виросли* з 15% до 50%. Це не однакове падіння.' },
|
|
{ text: 'Підготовчі впали — звідси й нижчий обсяг', correct: false,
|
|
feedback: 'Навпаки — підготовчі в листопаді *виросли* в абсолютному обсязі, бо їх частка стрибнула з 15% до 50%. Впали саме бойові.' },
|
|
]
|
|
},
|
|
|
|
riders_mix: {
|
|
prompt: 'Поглянь на ефективність *окремо* кожного сегменту через час. Що спостерігаєш?',
|
|
insightKey: 'mixShift',
|
|
options: [
|
|
{ text: 'Підготовчі стабільно близько 83% успіху, бойові — стабільно близько 58%. Жоден сегмент не покращився. Уся "перемога" в загальній цифрі — за рахунок зростання частки підготовчих.', correct: true,
|
|
feedback: 'Правильно. Усередині кожного сегменту нічого не змінилось. Обидва тримаються своєї історичної ефективності. Загальний показник зріс не тому, що ми краще робимо роботу — а тому, що *більшу частку* стала займати робота, яку ми завжди робили краще. Це класичний *зсув композиції*.' },
|
|
{ text: 'Підготовчі покращились, тому й загальна цифра вища', correct: false,
|
|
feedback: 'Подивись на криву підготовчих окремо — вона рівна, без значного зростання. Загальна цифра вища через зміну ваги, не через зміну продуктивності.' },
|
|
{ text: 'Бойові стали ефективнішими — особливо помітно у листопаді', correct: false,
|
|
feedback: 'Ефективність бойових тримається на ~58% — як у попередніх місяцях. У листопаді вона *не* стрибнула. Загальна цифра рухається лише через перерозподіл часток.' },
|
|
]
|
|
},
|
|
|
|
duration_paradox: {
|
|
prompt: 'Загальна ефективність зросла з 62% до 71%, але кожен сегмент окремо — не змінився. Як таке може бути?',
|
|
insightKey: 'durationParadox',
|
|
options: [
|
|
{ text: 'Жодний сегмент не змінився, але змінились їхні частки. Підготовчі (з ~83% успіху) стали більшою часткою; бойові (з ~58% успіху) — меншою. Загальна цифра зросла за рахунок зсуву ваги, не за рахунок поведінки.', correct: true,
|
|
feedback: 'Правильно! Це й є *зсув композиції* (відомий також як *парадокс Сімпсона*). Загальна цифра — це зважене середнє. Якщо ваги рухаються до сегменту з вищим показником, загальна цифра зростає, навіть коли всередині кожного сегменту нічого не змінилось. У звіті командирові: "ми не стали ефективнішими — ми просто робимо менше складного".' },
|
|
{ text: 'Холодна погода / зима покращує бойові операції', correct: false,
|
|
feedback: 'Ні — ефективність бойових у листопаді ~58%, як і в інших місяцях. Сезонність не пояснює стрибок загальної цифри.' },
|
|
{ text: 'Це випадкове коливання — нічого особливого', correct: false,
|
|
feedback: 'Стрибок з 62% до 71% — це 9 п.п. на ~500 операціях; це не шум. До того ж є дзеркальна ситуація з частками сегментів. Це структура, не випадковість.' },
|
|
]
|
|
},
|
|
};
|
|
|
|
const OBSERVATIONS = [
|
|
{ key: 'yoyPositive', text: 'Стрибок з 62% до 71% — справжній. Минулорічний листопад мав ~62%; цей рік перший з такою цифрою.', tag: 'observation' },
|
|
{ key: 'longRidesCollapse', text: 'За масштабом операцій падіння обсягу рівномірне (~30-40%) — масштаб не пояснює зміну ефективності.', tag: 'observation' },
|
|
{ key: 'casualDropMore', text: 'Бойові операції різко скоротились (частка 85% → 50%); підготовчі виросли (15% → 50%) — структура навантаження змінилась.', tag: 'observation' },
|
|
{ key: 'mixShift', text: 'Частка підготовчих операцій стрибнула з 15% до 50% — мікс операцій кардинально зсунувся.', tag: 'observation' },
|
|
{ key: 'durationParadox', text: 'Ефективність кожного сегменту окремо — стабільна; зростає тільки загальна цифра. Класична зміна композиції.', tag: 'observation' },
|
|
];
|
|
|
|
const CONCLUSIONS = [
|
|
{ key: 'conclusionSeasonal', text: 'Падіння обсягу операцій — структурний зсув (бойові скоротили), не операційна проблема й не чисто сезонність.', tag: 'conclusion' },
|
|
{ key: 'conclusionParadox', text: 'Зростання загальної ефективності — ефект композиції, не реальне покращення продуктивності.', tag: 'conclusion' },
|
|
];
|
|
|
|
// Dead-end lesson labels for the summary screen
|
|
const LESSON_NAMES = {
|
|
dayofweek: 'День тижня — перевіряй календарну структуру: різна кількість буднів/вихідних може створити фальшиві патерни.',
|
|
hourly: 'Однакова форма за годинами — це зміна обсягу, не патерну. Шукай розрізи, де *форма* розподілу змінюється.',
|
|
biketypes: 'Категорії рухаються в різні боки — це не однорідне падіння, а структурна зміна. Перевіряй частки.',
|
|
stations: 'Усі підрозділи впали схоже — причина системна, не локальна. Не шукай "винного" — шукай фактор, що вплинув на всіх.',
|
|
};
|