Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

16.02.2024

TimeTag - інтервал впевненості

Перейшов потроху зі збору даних (який працює досить непогано!) до аналізу. Тут не все просто: оскільки тайм трекер питає тебе в випадкові моменти, то не можна просто підрахувати розподіл результатів. На додаток маємо обчислити інтервал впевненості: “цією міткою відмічено 2 години плюс мінус 30 хвилин”.

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

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

Є тільки одна маленька проблема… формула використовує обернену гамма-функцію (TIL.) У автора вона написана в пакеті Mathematica. А як мені обчислити таку в коді? Спочатку знайшов npm-пакет, та навіть почав перекладати на Swift. Проте, перекладати складні математичні функції без розуміння ну дуже ризиковано — там добра тисяча рядків коду. Та й де гарантії, що автор невідомого NPM-пакету не встиг вже наробити помилок?

Тоді згадав про найстаріший трюк математичного програмування — обчислення за таблицею. Все, що мені потрібно — це знати значення оберненої гамма-функції для можливих значень кількості моментів з міткою. А значення можна взяти в Mathematica, точніше, у Wolfram Alpha. Причому відразу масивом — безплатно дає до 2 тисяч значень за раз, більше не проходить за часом:

InverseGammaRegularized[Range[8001,10000],0.025]

Для 10000 моментів інтервал впевненості дорівнює 4% - я думаю, що похибка “вимірювання” буде більша, тож немає сенсу збільшувати математичну точність. А зберегти в коді 20000 значень незрівнянно легше (та швидше у виконанні!), ніж обчислювати їх. Колись таким чином ігри зберігали тригонометричні функції та таке інше.