Powrót do strony głównej

Statystyka bez ML: kluczowe metody w Pythonie

Artykuł opisuje metody statystyczne jako alternatywę dla ML: średnią ważoną, korelację, rozkłady Poissona i dwumianowy. Podane są przykłady kodu w Pythonie z numpy i pandas do zadań biznesowych. Nadaje się do szybkiej analizy bez skomplikowanych modeli.

Statystyka zamiast ML: narzędzia Python do danych
Advertisement 728x90

Statystyczne metody analizy danych bez uczenia maszynowego

Narzędzia statystyczne pozwalają szybko analizować dane bez skomplikowanych modeli uczenia maszynowego. Średnia ważona uwzględnia znaczenie poszczególnych obserwacji, odchylenie standardowe i wariancja wskazują na niejednorodność, a rozkłady Poissona i dwumianowy prognozują rzadkie zdarzenia. Te metody w Pythonie z numpy i pandas są odpowiednie dla programistów middle/senior analizujących metryki biznesowe.

Średnia ważona: korekta zniekształceń od wartości odstających

Zwykła średnia jest wrażliwa na wartości odstające. Przy pensjach 10$ (dyrektor) i 0.10$ (sprzątaczka, waga 10) średnia daje 5.05$, co nie odzwierciedla rzeczywistości. Średnia ważona rozwiązuje ten problem:

import numpy as np

salary = np.array([10.0, 0.10])
weight = np.array([1, 10])

result = np.sum(salary * weight) / np.sum(weight)
print(f"Weighted average: ${result:.2f}")

Wynik: 1.00$. Zastosowania:

Google AdInline article slot
  • Analiza przychodów według kanałów sprzedaży z uwzględnieniem natężenia ruchu.
  • Ocena metryk o różnej częstości zdarzeń.
  • Grupowanie klientów według segmentów z wagami.

Odchylenie standardowe i wariancja: ocena stabilności

Odchylenie standardowe mierzy rozproszenie wokół średniej. Dla pensji [500, 400, 450, 550, 5000]:

import pandas as pd
import numpy as np

data = {
    "Employee": ["Ivan", "Maria", "Oleg", "Anna", "CEO"],
    "Salary": [500, 400, 450, 550, 5000]
}

df = pd.DataFrame(data)
n = len(df['Salary'])
mean_ = df['Salary'].mean()
s = np.sqrt(np.sum((df['Salary'] - mean_) ** 2) / (n - 1))

print(f"Standard deviation: {s:.2f}")

Wynik: 2024.41 — wskaźnik silnego odstania. Wariancja (kwadrat odchylenia) jest przydatna do porównywania zbiorów:

import numpy as np

sales = np.array([90, 95, 92, 93, 91, 200, 210])
mean_sales = np.mean(sales)
dispersion = np.sum((sales - mean_sales) ** 2) / (len(sales) - 1)

print("Variance:", dispersion)

Rozproszenie według dni (dni robocze vs weekendy) wymaga segmentacji danych.

Google AdInline article slot

Korelacja Pearsona: liniowe zależności bez przyczynowości

Współczynnik korelacji Pearsona ocenia liniową zależność. Wzór:

import numpy as np

X = np.array([1, 2, 3, 4, 5])  # study hours
Y = np.array([50, 55, 60, 65, 70])  # test scores

x_mean = np.mean(X)
y_mean = np.mean(Y)

corXY = np.sum((X - x_mean) * (Y - y_mean))
corr_sqrt = np.sqrt(np.sum((X - x_mean)**2) * np.sum((Y - y_mean)**2))

res = corXY / corr_sqrt
print(f"Pearson correlation: {res:.2f}")

r=1.00 — idealna zależność. Kwadrat (r²) podaje udział wyjaśnionej wariancji (w regresji — współczynnik determinacji). Pamiętaj: korelacja ≠ przyczynowość (przykład: golf i śmiertelność wśród osób starszych).

Test chi-kwadrat: sprawdzanie oczekiwań vs rzeczywistość

Chi-kwadrat porównuje obserwowane (O) i oczekiwane (E) wartości:

Google AdInline article slot
import numpy as np

O = np.array([1, 2, 3, 4, 7, 9, 11, 13, 14])  # observed
E = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])    # expected

xi = np.sum((O - E) ** 2 / E)
print(f"Chi-square statistic: {xi:.2f}")

Warunki: taka sama długość, E > 0. Większa wartość — większe rozbieżności. Stosowany do walidacji prognoz.

Rozkład Poissona: modelowanie rzadkich zdarzeń

Dla zdarzeń o stałej intensywności λ (średnia na interwał). Prawdopodobieństwo k zdarzeń:

import math

λ = 3   # srednesutochnoe count requests
k = 5   

prob = (λ ** k) * math.exp(-λ) / math.factorial(k)
print(f"Probability 5 requests: {prob:.4f}")

Wynik: 0.1008. Założenia: niezależność, stała prawdopodobieństwo, jedno zdarzenie na raz. Zastosowania:

  • Prognoza połączeń do wsparcia.
  • Ocena zamówień na stronie.
  • Analiza incydentów bezpieczeństwa.
  • Ryzyka w finansach.

Rozkład dwumianowy: sukcesy w próbach

Dla n prób z prawdopodobieństwem sukcesu p. Prawdopodobieństwo k sukcesów:

import math

n = 100
k = 70
p = 0.7

b_coef = math.factorial(n) / (math.factorial(k) * math.factorial(n - k))
prob = b_coef * (p ** k) * ((1 - p) ** (n - k))
print(f"Probability 70 otkrytiy: {prob:.6f}")

Przykłady: otwarcia e-maili, testy A/B, kontrola jakości.

Rozkład wykładniczy: interwały do zdarzeń

Prawdopodobieństwo zdarzenia po czasie x przy λ:

import math

lambd = 4    # vyzovov/hour
x = 1 / 3    # 20 min

prob = lambd * math.exp(-lambd * x)
print(f"Probability vyzova cherez 20 min: {prob:.4f}")

Dla kolejek, przestojów sprzętu.

Co ważne

  • Średnia ważona i odchylenie wykrywają zniekształcenia bez ML.
  • Korelacja ocenia zależności, r² — wyjaśnioną wariancję.
  • Poissona i dwumianowy — do prognozowania zdarzeń w biznesie.
  • Chi-kwadrat waliduje hipotezy przy minimalnych danych.
  • Wszystkie metody implementowalne na numpy/pandas, bez GPU.

— Editorial Team

Advertisement 728x90

Czytaj dalej