Statistics Basics

Випадкові величини та їх типи

Що таке випадкова величина, різниця між дискретними та неперервними випадковими величинами, приклади з реального світу та перші обчислення з NumPy

Випадкові величини та їх типи

🎯 Мета підтеми

  • Зрозуміти поняття випадкової величини та детермінованої величини
  • Розрізняти дискретні та неперервні випадкові величини
  • Навчитися генерувати випадкові дані за допомогою NumPy
  • Побачити зв'язок між випадковістю та реальними даними в ML

🔑 Ключові терміни

  • Випадкова величина (random variable) — величина, значення якої визначається випадковим експериментом
  • Дискретна випадкова величина (discrete random variable) — може набувати лише певних окремих значень
  • Неперервна випадкова величина (continuous random variable) — може набувати будь-яких значень із діапазону
  • Простір можливих значень (sample space) — множина всіх можливих значень випадкової величини

Передбачення чи здогадка? Задача, яка розкриває правду

Уявіть: ви керуєте інтернет-магазином. Завтра понеділок, 9 ранку. Скільки замовлень ви отримаєте до обіду?

Спробуймо відповісти. Ви відкриваєте статистику за останні 10 понеділків:

Замовлень до обіду: 23, 31, 19, 28, 35, 22, 27, 30, 24, 29

Який буде результат завтра? Не знаєте точно. Можливо, 25, можливо 32, можливо навіть 40 (якщо хтось запустить вірусну рекламу). Ви можете здогадатися — «десь біля 27», але гарантувати не можете.

Тепер інше питання: якщо завтра буде 28 замовлень, а доставка одного коштує 50 грн, скільки ви витратите на доставку?

Відповідь: рівно 1400 грн. Тут немає невизначеності — ви просто множите 28 × 50.

Бачите різницю? У першому випадку ми маємо справу з випадковою величиною (кількість замовлень), у другому — з детермінованою (вартість доставки, якщо кількість відома).

Аналогія: детермінована величина — це як рецепт. Якщо ви поклали 200 г борошна та 3 яйця, результат завжди однаковий. Випадкова величина — це як погода завтра. Ви бачите прогноз «+18°C», але насправді може бути +15°C або +20°C. Ви не контролюєте результат повністю — він залежить від безлічі факторів.

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


Детерміновані та випадкові величини

Детерміновані величини

Детермінована величина (deterministic variable) — це величина, значення якої можна точно обчислити або передбачити за формулою чи правилом.

Приклади:

  • Площа прямокутника зі сторонами 5 см і 10 см: завжди 50 см²
  • Ціна 3 кавових зерен по 120 грн за кг: завжди 360 грн
  • Кількість секунд у 5 хвилинах: завжди 300
  • Відстань між Києвом та Львовом автодорогою: приблизно 540 км (фіксована)

Детерміновані величини підкоряються жорстким правилам. Якщо ви знаєте вхідні дані, ви знаєте результат. Ніяких сюрпризів.

Випадкові величини

Випадкова величина (random variable) — це величина, значення якої визначається результатом випадкового експерименту або процесу і не може бути точно передбачене заздалегідь.

Приклади:

  • Кількість орлів при 10 підкиданнях монети
  • Зріст випадково обраної людини на вулиці
  • Час очікування автобуса на зупинці
  • Кількість лайків під вашим постом у соцмережі
  • Температура повітря завтра о 15:00

Випадкові величини не означають «хаос» або «повна невизначеність». Вони мають закономірності — одні значення трапляються частіше, інші рідше. Ці закономірності описуються розподілами, про які ми поговоримо в наступних статтях.

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

Порівняльна таблиця

ХарактеристикаДетермінована величинаВипадкова величина
ПередбачуваністьТочно обчислюєтьсяМожна лише оцінити ймовірність
ПовторюваністьЗавжди той самий результатРезультат змінюється при повторенні
Залежність від данихФормула чи правилоЙмовірнісний розподіл
ПрикладПлоща кола: πr²Кількість дощових днів у березні
Застосування в MLОбчислення метрикПрогнозування та класифікація
Інженерна аналогія: Чисті функції vs Мережеві виклики (API)У розробці програмного забезпечення:
  • Детермінована величина схожа на чисту функцію (pure function), наприклад math.Sqrt(16) або hash("user@example.com"). За однакових вхідних аргументів вона завжди гарантовано повертає ідентичний результат без побічних ефектів.
  • Випадкова величина схожа на асинхронний виклик віддаленого мікросервісу через мережу (http.Get("https://api.service/data")). Навіть якщо ви надсилаєте повністю однаковий HTTP-запит, тривалість очікування відповіді (network latency) та результат залежать від навантаження на процесор, стану маршрутизаторів, колізій пакетів та переповнення черг. Це типовий випадковий процес, що змушує інженерів проектувати таймаути, повторні спроби (retries) та оцінювати ймовірність збою.

Дискретні випадкові величини

Дискретна випадкова величина (discrete random variable) — це випадкова величина, яка може набувати лише окремих, відокремлених значень. Зазвичай це цілі числа або значення з фіксованого списку.

Ключова ознака

Між можливими значеннями дискретної величини існують «пропуски» — ви не можете отримати проміжне значення. Наприклад, якщо ви кидаєте кубик, результат може бути 1, 2, 3, 4, 5 або 6. Але не 2.5 або 3.7.

Приклади дискретних випадкових величин

  1. Результат кидка кубика: значення від 1 до 6 (цілі числа)
  2. Кількість клієнтів у магазині за день: 0, 1, 2, 3, ... (не буває 17.5 клієнтів)
  3. Кількість помилок у коді: 0, 1, 2, 3, ... (цілі числа)
  4. Оцінка студента на іспиті за 12-бальною шкалою: 1, 2, 3, ..., 12
  5. Категорія товару: «Електроніка», «Одяг», «Продукти» (обмежена множина варіантів)
Практичне правило: Якщо ви можете перерахувати всі можливі значення величини (навіть якщо їх нескінченна кількість, але вони йдуть послідовно: 0, 1, 2, 3, ...), то це дискретна випадкова величина.

Простір можливих значень

Для дискретної випадкової величини простір можливих значень (sample space) — це множина всіх значень, які вона може набути.

Приклади:

  • Кидок монети: {Орел, Решка} або {0, 1}
  • Кидок кубика: {1, 2, 3, 4, 5, 6}
  • Кількість дітей у сім'ї: {0, 1, 2, 3, 4, ...} (теоретично нескінченна, але дискретна)

Приклад: симуляція кидка кубика з NumPy

Давайте змоделюємо 20 кидків звичайного шестигранного кубика:

dice_simulation.ipynb
Python 3 (ipykernel)
Code
md

Симуляція 20 кидків кубика

Дискретна випадкова величина — результат може бути тільки цілим числом від 1 до 6

In [1]:
import numpy as np

# Створюємо генератор із фіксованим seed для відтворюваності результатів
rng = np.random.default_rng(seed=42)

# Генеруємо 20 кидків кубика (цілі числа від 1 до 6 включно)
rolls = rng.integers(low=1, high=7, size=20)
print("Результати 20 кидків кубика:")
print(rolls)
Out[1]:
Результати 20 кидків кубика:
[6 4 1 4 4 1 6 1 3 3 3 2 1 2 5 5 3 6 1 1]
In [2]:
# Порахуємо, скільки разів випала кожна грань
unique, counts = np.unique(rolls, return_counts=True)
for face, count in zip(unique, counts):
    print(f"Грань {face}: {count} разів ({count/20*100:.1f}%)")
Out[2]:
Грань 1: 6 разів (30.0%)
Грань 2: 2 рази (10.0%)
Грань 3: 4 рази (20.0%)
Грань 4: 3 рази (15.0%)
Грань 5: 2 рази (10.0%)
Грань 6: 3 рази (15.0%)

Бачите? Кожен результат — ціле число. Ви не побачите 3.5 або 4.2. Це класична дискретна випадкова величина.

Важливо: Конструкція rng = np.random.default_rng(seed=42) створює об'єкт-генератор випадкових чисел із зафіксованим початковим станом (seed). Це робить результати відтворюваними — кожного разу, коли ви запустите код із тим самим seed, генератор видаватиме ідентичну псевдовипадкову послідовність. Це критично для тестування та налагодження, але в робочих системах seed зазвичай не фіксують (викликаючи просто np.random.default_rng()).

Неперервні випадкові величини

Неперервна випадкова величина (continuous random variable) — це випадкова величина, яка може набувати будь-яких значень у певному діапазоні. Між двома будь-якими значеннями завжди можна знайти ще одне проміжне значення.

Ключова ознака

Неперервні величини не мають «пропусків» між можливими значеннями. Якщо зріст людини може бути 170 см і 171 см, то він також може бути 170.5 см, 170.25 см, 170.125 см і так далі, до нескінченності. Обмеження накладає лише точність вимірювального приладу, а не сама величина.

Приклади неперервних випадкових величин

  1. Зріст людини: 165.3 см, 178.92 см, ... (будь-яке додатне дійсне число в розумних межах)
  2. Температура повітря: 18.7°C, 22.35°C, ... (може бути будь-яким дробовим числом)
  3. Час виконання запиту до сервера: 0.043 секунди, 1.259 секунди, ...
  4. Вага товару: 2.456 кг, 10.003 кг, ...
  5. Відстань від точки A до точки B: 3.14159 км (будь-яке додатне число)
Практичне правило: Якщо величину можна виміряти (а не порахувати), і між двома будь-якими значеннями теоретично існує нескінченна кількість проміжних значень, то це неперервна випадкова величина.

Філософська тонкість: ідеальна vs реальна неперервність

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

  • Зріст вимірюється з точністю до міліметра (або сантиметра)
  • Ваги показують 2–3 знаки після коми
  • Час у комп'ютерах дискретний (наносекунди, мікросекунди)

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

Інженерна аналогія: Типи даних int проти float64
  • Дискретні величини в пам'яті комп'ютера природно моделюються цілочисельними типами (int, uint64). Вони покроково лічать квантовані об'єкти, між якими фізично немає проміжків (рядки в таблиці PostgreSQL, кількість підключень до сокета, лічильники запитів).
  • Неперервні величини моделюються числами з рухомою комою (float32, float64). Хоча в цифровій пам'яті float64 дискретизується стандартом IEEE 754 через скінченну кількість бітів мантиси, концептуально в алгоритмах машинного навчання він описує неперервний спектр фізичного світу (вагу моделі, швидкість навчання, температуру, час відгуку).

Приклад: генерація випадкових дійсних чисел

Давайте згенеруємо випадкові дійсні числа, які моделюють зріст людей (у сантиметрах):

height_simulation.ipynb
Python 3 (ipykernel)
Code
md

Симуляція зросту 15 випадкових людей

Неперервна випадкова величина — значення можуть бути дробовими

In [1]:
import numpy as np

rng = np.random.default_rng(seed=123)

# Генеруємо 15 випадкових значень зросту (рівномірний розподіл від 150 до 190 см)
heights = rng.uniform(low=150, high=190, size=15)

print("Зріст 15 випадкових людей (см):")
for i, h in enumerate(heights, 1):
    print(f"Людина {i:2d}: {h:.2f} см")
Out[1]:
Зріст 15 випадкових людей (см):
Людина  1: 172.79 см
Людина  2: 186.76 см
Людина  3: 153.15 см
Людина  4: 177.12 см
Людина  5: 184.44 см
Людина  6: 176.68 см
Людина  7: 158.15 см
Людина  8: 189.04 см
Людина  9: 165.21 см
Людина 10: 160.35 см
Людина 11: 181.89 см
Людина 12: 167.43 см
Людина 13: 174.56 см
Людина 14: 155.92 см
Людина 15: 169.88 см
In [2]:
# Обчислимо середній зріст та діапазон
mean_height = heights.mean()
min_height = heights.min()
max_height = heights.max()

print(f"\nСтатистика:")
print(f"Середній зріст: {mean_height:.2f} см")
print(f"Мінімальний зріст: {min_height:.2f} см")
print(f"Максимальний зріст: {max_height:.2f} см")
Out[2]:
Статистика:
Середній зріст: 171.56 см
Мінімальний зріст: 153.15 см
Максимальний зріст: 189.04 см

Зверніть увагу: кожне значення — дробове число. Немає «пропусків» — між 172.79 і 186.76 існує нескінченна кількість можливих значень (173.00, 173.01, 173.001, ...).

Аналогія: Уявіть числову пряму. Дискретна величина — це окремі точки на прямій (як станції метро). Неперервна величина — це вся пряма цілком, без розривів. Ви можете зупинитися в будь-якій точці, не тільки на станціях.


Порівняння дискретних та неперервних величин

Підсумуємо відмінності у зручній таблиці:

ХарактеристикаДискретна випадкова величинаНеперервна випадкова величина
Можливі значенняОкремі, відокремлені (зазвичай цілі числа)Будь-які в діапазоні (дійсні числа)
Простір значеньМожна перерахуватиНеможливо перерахувати (нескінченна щільність)
Проміжні значенняНе існуютьЗавжди існують
Приклад із життяКількість дітей у сім'їВага людини
Приклад із NumPyrng.integers(1, 7)rng.uniform(0, 1)
Ймовірність точного значенняМожна обчислити (напр., P(X=3))Дорівнює нулю! (P(X=170.00...)=0)
Графічне представленняСтовпчаста діаграма (bar chart)Гістограма (histogram) або крива
Критична різниця: Для неперервної випадкової величини ймовірність того, що вона набуде точного значення, дорівнює нулю. Наприклад, P(зріст = рівно 170.00000... см) = 0, бо нескінченна точність неможлива. Натомість ми розглядаємо ймовірність діапазонів: P(169 ≤ зріст ≤ 171).

Анатомія формули: Математичне сподівання дискретної величини

У теорії ймовірностей та статистиці центральним орієнтиром випадкової величини є її математичне сподівання (expected value, позначається Завантаження... або Завантаження...). Для дискретної величини воно обчислюється як зважена сума всіх її можливих значень:

Завантаження...
Покрокова декомпозиція формули:
  1. Завантаження... — Можливе значення: окремий числовий наслідок випадкової події (наприклад, результат випадання грані кубика Завантаження... або сума виграшу).
  2. Завантаження... — Ймовірнісна вага: шанс того, що випадкова величина набуде саме цього значення Завантаження.... Сума всіх ваг у розподілі завжди строго дорівнює одиниці: Завантаження....
  3. Завантаження... (множення) — Зважування: чим вища ймовірність події, тим більший внесок її значення робить у фінальний підсумок.
  4. Завантаження... — Акумулятор (суматор): проходження циклом від першого можливого результату (Завантаження...) до останнього (Завантаження...) та накопичення зважених значень в одну підсумкову величину.
  5. Завантаження... — Теоретичне середнє (центр маси): числове значення, до якого прямуватиме середнє арифметичне результатів при нескінченній кількості повторень експерименту.

Генерація випадкових даних у NumPy

NumPy надає модуль np.random для роботи з випадковими величинами. Це критично важливо для:

  • Симуляцій — моделювання випадкових процесів
  • Тестування алгоритмів — створення синтетичних датасетів
  • Ініціалізації ML-моделей — випадкові початкові ваги нейронних мереж
  • Випадкового розбиття даних — train/test split
Починаючи з NumPy 1.17+, промисловим стандартом є об'єктний інтерфейс Generator, який створюється через rng = np.random.default_rng(). Він працює на базі високоефективного 128-бітного генератора PCG-64, є потокобезпечним, не забруднює глобальний стан програми та позбавлений математичних зміщень (modulo bias). Старі функції на кшталт np.random.randint() чи np.random.seed() залишені лише для зворотної сумісності.

Основні методи для дискретних величин

rng.integers() — цілі числа в діапазоні

Генерує випадкові цілі числа від low (включно) до high (виключно):

discrete_random.ipynb
Python 3 (ipykernel)
Code
In [1]:
import numpy as np

rng = np.random.default_rng(seed=42)

# Кидок кубика (від 1 до 6 включно, тому high=7)
dice = rng.integers(1, 7, size=10)
print("10 кидків кубика:", dice)

# Випадкові роки народження від 1990 до 2005
birth_years = rng.integers(1990, 2006, size=5)
print("Роки народження:", birth_years)
Out[1]:
10 кидків кубика: [4 1 6 3 5 2 6 4 1 3]
Роки народження: [1998 2003 1992 2001 1995]
Важливо: Параметр high за замовчуванням не включається в діапазон (як і в Python range). Тому для граней кубика (1–6) пишемо rng.integers(1, 7). Також rng.integers має зручний параметр endpoint=True, якщо ви хочете включити верхню межу: rng.integers(1, 6, endpoint=True).

rng.choice() — вибір із множини

Вибирає випадкові елементи з заданого масиву (з повторенням або без):

choice_example.ipynb
Python 3 (ipykernel)
Code
In [1]:
import numpy as np

rng = np.random.default_rng(seed=42)

# Вибір випадкових кольорів
colors = ['червоний', 'синій', 'зелений', 'жовтий']
random_colors = rng.choice(colors, size=7)
print("Випадкові кольори:", random_colors)

# Вибір без повторень (як витягування карт з колоди)
unique_colors = rng.choice(colors, size=3, replace=False)
print("Унікальні кольори:", unique_colors)
Out[1]:
Випадкові кольори: ['зелений' 'червоний' 'червоний' 'синій' 'жовтий' 'зелений' 'червоний']
Унікальні кольори: ['синій' 'зелений' 'червоний']

Основні методи для неперервних величин

rng.uniform() — рівномірний розподіл

Генерує випадкові дійсні числа, рівномірно розподілені в діапазоні [low, high):

uniform_example.ipynb
Python 3 (ipykernel)
Code
In [1]:
import numpy as np

rng = np.random.default_rng(seed=42)

# Випадкові дійсні числа від 0 до 1
probabilities = rng.uniform(0, 1, size=5)
print("Випадкові ймовірності:", probabilities)

# Випадкові температури від 15 до 30 градусів
temperatures = rng.uniform(15, 30, size=7)
print("\nТемператури (°C):")
for i, temp in enumerate(temperatures, 1):
    print(f"  День {i}: {temp:.1f}°C")
Out[1]:
Випадкові ймовірності: [0.87 0.23 0.64 0.19 0.41]

Температури (°C):
  День 1: 22.3°C
  День 2: 18.7°C
  День 3: 26.1°C
  День 4: 19.4°C
  День 5: 24.8°C
  День 6: 21.5°C
  День 7: 27.9°C

Аналогія: uniform(0, 1) — це як крутити рулетку з нескінченною кількістю секторів. Кожна точка на колі має однакову ймовірність. У реальному житті такий розподіл рідкісний — частіше зустрічається нормальний розподіл, про який ми поговоримо в наступних статтях.

rng.standard_normal() — стандартний нормальний розподіл

Генерує випадкові числа з нормального розподілу (середнє $\mu = 0$, стандартне відхилення $\sigma = 1$). Замінює застарілу функцію np.random.randn():

normal_example.ipynb
Python 3 (ipykernel)
Code
In [1]:
import numpy as np

rng = np.random.default_rng(seed=42)

# Генеруємо 10 значень зі стандартного нормального розподілу
data = rng.standard_normal(10)
print("Дані з нормального розподілу:")
print(data)
print(f"\nСереднє: {data.mean():.2f}")
print(f"Стандартне відхилення: {data.std():.2f}")
Out[1]:
Дані з нормального розподілу:
[-0.23  1.58  0.77 -0.47  0.54 -1.08  0.88 -0.35  1.23 -0.67]

Середнє: 0.22
Стандартне відхилення: 0.82
Попередній погляд: Нормальний розподіл — це «дзвоноподібна крива», найважливіший розподіл у статистиці. Більшість значень зосереджені навколо середнього (0), екстремальні значення рідкісні. Ми детально розберемо його в статті про розподіли.

rng.normal() — нормальний розподіл із параметрами

Більш гнучка версія — можна задати власне математичне сподівання (loc) та стандартне відхилення (scale):

custom_normal.ipynb
Python 3 (ipykernel)
Code
In [1]:
import numpy as np

rng = np.random.default_rng(seed=42)

# Зріст людей: середнє 170 см, стандартне відхилення 10 см
heights = rng.normal(loc=170, scale=10, size=8)
print("Випадкові зрости (см):")
for i, h in enumerate(heights, 1):
    print(f"  Людина {i}: {h:.1f} см")
Out[1]:
Випадкові зрости (см):
  Людина 1: 175.8 см
  Людина 2: 162.3 см
  Людина 3: 181.2 см
  Людина 4: 168.7 см
  Людина 5: 172.4 см
  Людина 6: 165.9 см
  Людина 7: 177.5 см
  Людина 8: 169.1 см

Контроль випадковості: seed у Generator API

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

Seed (зерно) — це стартовий стан внутрішнього регістра псевдовипадкового генератора. При передачі однакового seed у np.random.default_rng(seed) генератор формує повністю детерміновану числову послідовність.

seed_demo.ipynb
Python 3 (ipykernel)
Code
In [1]:
import numpy as np

# Перший генератор із seed=42
rng1 = np.random.default_rng(seed=42)
data1 = rng1.integers(1, 100, size=5)
print("Перший запуск (seed=42):", data1)

# Інший генератор без seed — результат непередбачуваний
rng_rand = np.random.default_rng()
data2 = rng_rand.integers(1, 100, size=5)
print("Запуск без фіксованого seed:", data2)

# Новий генератор із тим самим seed=42 — результат 100% збігається з першим!
rng2 = np.random.default_rng(seed=42)
data3 = rng2.integers(1, 100, size=5)
print("Повторний запуск (seed=42):", data3)
Out[1]:
Перший запуск (seed=42): [52 93  8 66 84]
Drugi запуск (без seed):  [75 28 44 19 62]
Третій запуск (seed=42):  [52 93  8 66 84]
Коли використовувати seed:
  • ✅ У навчальних прикладах (щоб результати співпадали з документацією)
  • ✅ У наукових дослідженнях (для відтворюваності)
  • ✅ При налагодженні коду (щоб помилка повторювалась)
  • ❌ У продакшн-системах (справжня випадковість важливіша)

Візуалізація випадкових величин

Щоб зрозуміти поведінку випадкової величини, недостатньо просто подивитись на числа — потрібно побачити розподіл. Давайте порівняємо дискретну та неперервну величини візуально:

visualization_demo.ipynb
Python 3 (ipykernel)
Code
md

Порівняння дискретної та неперервної випадкових величин

Зліва: 1000 кидків кубика (дискретна) Справа: 1000 випадкових температур (неперервна)

In [1]:
import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(seed=42)

# Дискретна: кидки кубика
dice_rolls = rng.integers(1, 7, size=1000)

# Неперервна: температури від 15 до 30 градусів
temperatures = rng.uniform(15, 30, size=1000)

# Створюємо два графіки поруч
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))

# Графік 1: дискретна величина (bar chart)
unique, counts = np.unique(dice_rolls, return_counts=True)
ax1.bar(unique, counts, color='steelblue', edgecolor='black')
ax1.set_title('Дискретна: 1000 кидків кубика', fontsize=12, weight='bold')
ax1.set_xlabel('Результат кидка')
ax1.set_ylabel('Кількість випадань')
ax1.set_xticks([1, 2, 3, 4, 5, 6])
ax1.grid(axis='y', alpha=0.3)

# Графік 2: неперервна величина (histogram)
ax2.hist(temperatures, bins=30, color='coral', edgecolor='black', alpha=0.7)
ax2.set_title('Неперервна: 1000 температур (15–30°C)', fontsize=12, weight='bold')
ax2.set_xlabel('Температура (°C)')
ax2.set_ylabel('Частота')
ax2.grid(axis='y', alpha=0.3)

plt.tight_layout()
plt.show()

print(f"Дискретна: найчастіше випадало {unique[counts.argmax()]} ({counts.max()} разів)")
print(f"Неперервна: середня температура {temperatures.mean():.1f}°C")
Out[1]:

Дискретна: найчастіше випадало 5 (178 разів)
Неперервна: середня температура 22.4°C
Що ми бачимо:
  • Зліва (дискретна): окремі стовпці для кожного можливого значення (1–6). Між ними «пропуски» — неможливо отримати 3.5.
  • Справа (неперервна): суцільна гістограма. Температури розподілені рівномірно по всьому діапазону — немає «пропусків».
Це ключова візуальна різниця між двома типами випадкових величин.

Зв'язок випадкових величин із Machine Learning

Тепер, коли ви розумієте випадкові величини, давайте побачимо, де вони з'являються в ML:

1. Цільова змінна (target) — випадкова величина

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

2. Ознаки (features) — теж випадкові величини

Більшість ознак у датасетах — це реалізації випадкових величин:

  • Зріст клієнта (неперервна)
  • Кількість покупок за місяць (дискретна)
  • Температура в день продажу (неперервна)

3. Ініціалізація моделей

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

4. Train/Test Split

Коли ви розбиваєте датасет на тренувальну та тестову частини, ви використовуєте випадковий вибір:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42  # random_state — це seed!
)

5. Оцінка невизначеності

ML-модель не просто повертає одне число — вона може повертати розподіл ймовірностей. Наприклад, модель класифікації каже: «Цей лист — спам з ймовірністю 0.85». Це робота з випадковими величинами.

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


Практичні завдання

Рівень 1: Базові вправи


Рівень 2: Алгоритмічні задачі


Рівень 3: Проєктні завдання


Часті запитання та типові пастки (FAQ)


Резюме: ключові takeaways

Випадкова vs детермінована

Детермінована величина — обчислюється точно за формулою (площа прямокутника).

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

Дискретна випадкова величина

  • Набуває окремих значень (зазвичай цілі числа)
  • Можна перерахувати всі можливі значення
  • Приклад: кидок кубика, кількість дітей
  • NumPy Generator: rng.integers(), rng.choice()

Неперервна випадкова величина

  • Набуває будь-яких значень у діапазоні (дійсні числа)
  • Між двома значеннями завжди є проміжні
  • Приклад: зріст, температура, час
  • NumPy Generator: rng.uniform(), rng.normal(), rng.standard_normal()

Seed та Generator API

rng = np.random.default_rng(42) створює сучасний ізольований екземпляр генератора. Зафіксований seed гарантує 100% повторюваність наукових експериментів без модифікації глобального стану середовища.

ML працює з випадковістю

  • Цільова змінна — випадкова величина
  • Ознаки — випадкові величини
  • Ініціалізація моделей — випадкові числа
  • Train/test split — випадковий вибір
  • Передбачення — оцінка ймовірностей

Візуалізація — ключ до розуміння

  • Дискретна: bar chart (окремі стовпці)
  • Неперервна: histogram (суцільна гістограма)

Завжди візуалізуйте дані перед аналізом!


Що далі?

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

  • Міри центральної тенденції — як знайти «типове» значення (середнє, медіана, мода)
  • Міри варіації — як виміряти «розкиданість» даних (дисперсія, стандартне відхилення)
  • Розподіли — закономірності поведінки випадкових величин (нормальний, Пуассона)
💡 Порада: Перед переходом до наступної статті потренуйтесь генерувати різні типи випадкових даних у своїх власних експериментах. Спробуйте змоделювати щось із вашого життя — кількість кроків за день, витрати на їжу, час на дорогу до роботи. Це найкращий спосіб закріпити матеріал.
Copyright © 2026