0Pricing
Learn AI with Python · Lekcja

Analiza rozkładu cech i zmiennej docelowej

Analizowanie zależności cech ze zmienną docelową, wykrywanie niezrównoważenia klas i informacji wzajemnej.

Analiza rozkładu cech i zmiennej docelowej to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Dlaczego analizować cechy względem zmiennej docelowej

Zmienna docelowa to zmienna, którą chcesz przewidywać. Celem EDA na potrzeby modelowania jest ustalenie, które cechy rzeczywiście są z nią powiązane.

W tej lekcji omówiono wykresy cecha–zmienna docelowa, pomiar dostarczanej informacji za pomocą informacji wzajemnej, wykrywanie niezrównoważenia klas oraz korygowanie skośności za pomocą transformacji.

Cecha a zmienna docelowa — zmienna docelowa liczbowa

W przypadku liczbowej zmiennej docelowej wykres rozrzutu feature względem target pokazuje, czy cecha zawiera użyteczny sygnał.

Wyraźny trend oznacza, że cecha ma wartość predykcyjną, natomiast bezkształtna chmura punktów sugeruje, że prawdopodobnie jej nie ma.

import seaborn as sns
import matplotlib.pyplot as plt

sns.scatterplot(x="rooms", y="price", data=df, alpha=0.4)
plt.show()

Cecha a zmienna docelowa — zmienna docelowa kategorialna

Gdy zmienna docelowa jest etykietą klasy, porównaj rozkład cechy w obrębie każdej klasy. Nakładające się wykresy KDE oznaczają, że cecha słabo rozdziela klasy, a dobrze od siebie oddzielone krzywe wskazują, że jest użyteczna.

sns.kdeplot(data=df, x="balance", hue="churned", common_norm=False, fill=True)
plt.title("Balance by churn status")
plt.show()

Porównywanie rozkładów klas za pomocą wykresów pudełkowych

Grupowane wykresy pudełkowe to kolejny sposób przedstawiania zależności między cechą a klasą: umieść klasę zmiennej docelowej na osi x, a cechę na osi y.

Różne mediany w poszczególnych klasach wskazują, że cecha pomaga je rozróżniać.

sns.boxplot(x="churned", y="tenure", data=df)
plt.show()

Wykrywanie niezrównoważenia klas

Niezrównoważenie klas występuje, gdy jedna klasa zmiennej docelowej zdecydowanie przewyższa liczebnością inną (np. 95% przypadków bez oszustwa i 5% przypadków oszustwa). Zjawisko to wprowadza w błąd przy ocenie dokładności i skłania modele ku klasie większościowej.

Sprawdź je za pomocą prostego zliczenia wartości zmiennej docelowej.

print(df["churned"].value_counts())
# 0    9200
# 1     800

value_counts(normalize=True) do obliczania proporcji

Surowe liczności mogą ukrywać skalę niezrównoważenia. normalize=True zamienia liczności na proporcje, dzięki czemu możesz odczytać wynik bezpośrednio jako procent.

print(df["churned"].value_counts(normalize=True))
# 0    0.92
# 1    0.08   -> only 8% positive class

Dlaczego niezrównoważenie ma znaczenie

Przy 92% przypadków negatywnych model, który zawsze przewiduje „nie”, osiąga 92% dokładności, będąc jednocześnie bezużyteczny. Dlatego warto wcześnie sprawdzać niezrównoważenie.

Możliwe rozwiązania to ponowne próbkowanie (nadpróbkowanie klasy mniejszościowej lub podpróbkowanie klasy większościowej), wagi klas albo użycie miar takich jak precyzja, czułość i F1 zamiast dokładności.

Informacja wzajemna — pomiar dostarczanej informacji

Informacja wzajemna mierzy, w jakim stopniu znajomość cechy zmniejsza niepewność dotyczącą zmiennej docelowej. W przeciwieństwie do korelacji uwzględnia również zależności nieliniowe.

Dla zmiennych docelowych używanych w klasyfikacji scikit-learn udostępnia funkcję mutual_info_classif.

from sklearn.feature_selection import mutual_info_classif

X = df[["balance", "tenure", "rooms"]]
y = df["churned"]
mi = mutual_info_classif(X, y, random_state=42)
print(dict(zip(X.columns, mi)))

Ranking cech według informacji wzajemnej

Umieszczenie wyników MI w posortowanym obiekcie Series pozwala szybko utworzyć ranking ważności cech. Wyższa wartość MI oznacza, że cecha dostarcza więcej informacji o zmiennej docelowej.

To świetny filtr wstępny, który można zastosować przed wytrenowaniem dowolnego modelu.

import pandas as pd
from sklearn.feature_selection import mutual_info_classif

mi = mutual_info_classif(X, y, random_state=42)
scores = pd.Series(mi, index=X.columns).sort_values(ascending=False)
print(scores)

Transformacja logarytmiczna cech o skośnym rozkładzie

Cechy o prawostronnie skośnym rozkładzie (dochody, liczności, ceny) często zachowują się lepiej po zastosowaniu transformacji logarytmicznej, która skraca długi ogon i nadaje rozkładowi bardziej symetryczny kształt.

Użyj np.log1p (logarytmu z 1 + x), aby bezpiecznie obsługiwać wartości zerowe.

import numpy as np

df["income_log"] = np.log1p(df["income"])
print(df["income"].skew(), "->", df["income_log"].skew())

Przed i po transformacji — wizualizacja

Zawsze sprawdzaj, czy transformacja pomogła, tworząc wykres przed jej zastosowaniem i po nim. Wersja logarytmiczna powinna być bardziej zbliżona do symetrycznego kształtu dzwonowego.

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 2)
df["income"].hist(ax=ax[0]); ax[0].set_title("Raw")
np.log1p(df["income"]).hist(ax=ax[1]); ax[1].set_title("log1p")
plt.show()

Szybkie sprawdzenie: korekta skośności cechy

Cecha ma silnie prawostronnie skośny rozkład i zawiera kilka wartości zerowych.

Podsumowanie: analiza cech i zmiennej docelowej

Nauczyłeś się łączyć cechy ze zmienną docelową predykcji:

  • wykresy rozrzutu, KDE i pudełkowe do obserwowania sygnału między cechą a zmienną docelową
  • value_counts(normalize=True) do wykrywania i określania skali niezrównoważenia klas
  • mutual_info_classif do tworzenia rankingu cech według dostarczanej informacji, w tym zależności nieliniowych
  • np.log1p do łagodzenia prawostronnej skośności cech

To kończy etap eksploracyjnej analizy danych. Następny temat: pobieranie danych z internetowych interfejsów API.

Często zadawane pytania

Czy lekcja „Analiza rozkładu cech i zmiennej docelowej” jest bezpłatna?

Tak — pełny tekst „Analiza rozkładu cech i zmiennej docelowej” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Co nauczysz się w „Analiza rozkładu cech i zmiennej docelowej”?

Analizowanie zależności cech ze zmienną docelową, wykrywanie niezrównoważenia klas i informacji wzajemnej. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?

Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Analiza rozkładu cech i zmiennej docelowej”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?

Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Przepływ EDA i profilowanie danych
  2. Analiza jednowymiarowa
  3. Analiza dwu- i wielowymiarowa
  4. Analiza rozkładu cech i zmiennej docelowej
← Powrót do Learn AI with Python