Projekt: Klasyfikacja przeżycia pasażerów Titanica¶

W tym projekcie wykorzystamy PyCaret do przewidywania, którzy pasażerowie Titanica przeżyli katastrofę.

PyCaret to narzędzie, które automatycznie testuje wiele różnych algorytmów uczenia maszynowego i wybiera najlepszy.

Krok 1: Import bibliotek¶

Najpierw importujemy (wczytujemy) potrzebne narzędzia do pracy z danymi.

In [1]:
# pandas - narzędzie do pracy z tabelami danych (jak Excel w Pythonie)
import pandas as pd

# pycaret - automatyczne narzędzie do uczenia maszynowego
from pycaret.classification import *

Krok 2: Wczytanie danych z pliku CSV¶

Teraz wczytamy dane o pasażerach Titanica z pliku CSV (plik tekstowy z danymi w kolumnach).

In [2]:
# Wczytujemy dane z pliku CSV do zmiennej 'data'
# read_csv() - funkcja która czyta plik CSV i tworzy z niego tabelę
data = pd.read_csv('data/titanic.csv')

# Wyświetlamy pierwsze 5 wierszy, żeby zobaczyć jak wyglądają dane
# head() - pokazuje początek tabeli
print("Pierwsze wiersze danych:")
data.head()
Pierwsze wiersze danych:
Out[2]:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

Krok 3: Przygotowanie danych do uczenia maszynowego¶

PyCaret automatycznie przygotuje dane - podzieli je na część treningową (do nauki) i testową (do sprawdzenia).

In [3]:
# setup() - funkcja która przygotowuje dane do uczenia maszynowego
# data=data - nasze dane o pasażerach Titanica
# target='Survived' - mówimy PyCaret, że chcemy przewidywać kolumnę 'Survived' (czy ktoś przeżył: 1=tak, 0=nie)
# session_id=123 - liczba dla powtarzalności wyników (żeby za każdym razem dostać takie same wyniki)

clf = setup(data=data, target='Survived', session_id=123)
  Description Value
0 Session id 123
1 Target Survived
2 Target type Binary
3 Original data shape (891, 12)
4 Transformed data shape (891, 14)
5 Transformed train set shape (623, 14)
6 Transformed test set shape (268, 14)
7 Numeric features 6
8 Categorical features 5
9 Rows with missing values 79.5%
10 Preprocess True
11 Imputation type simple
12 Numeric imputation mean
13 Categorical imputation mode
14 Maximum one-hot encoding 25
15 Encoding method None
16 Fold Generator StratifiedKFold
17 Fold Number 10
18 CPU Jobs -1
19 Use GPU False
20 Log Experiment False
21 Experiment Name clf-default-name
22 USI 3dd1

Krok 4: Porównanie wszystkich modeli¶

Teraz PyCaret przetestuje wiele różnych algorytmów i pokaże, który jest najlepszy. To zajmie chwilę - komputer uczy różne modele i porównuje ich dokładność.

In [4]:
# compare_models() - testuje wszystkie dostępne modele uczenia maszynowego
# Zwraca tabelę z wynikami, gdzie każdy wiersz to inny algorytm
# Modele są posortowane od najlepszego do najgorszego
# Accuracy (dokładność) to procent poprawnych przewidywań

best_model = compare_models()
  Model Accuracy AUC Recall Prec. F1 Kappa MCC TT (Sec)
lr Logistic Regression 0.7975 0.8691 0.6697 0.7719 0.7132 0.5592 0.5654 0.6380
ridge Ridge Classifier 0.7528 0.8647 0.4522 0.8257 0.5793 0.4273 0.4679 0.0350
et Extra Trees Classifier 0.7400 0.7837 0.4774 0.7654 0.5815 0.4088 0.4356 0.0660
nb Naive Bayes 0.6709 0.7925 0.1761 0.8582 0.2816 0.1808 0.2747 0.0360
knn K Neighbors Classifier 0.6275 0.5906 0.3690 0.5175 0.4255 0.1654 0.1713 0.3980
lda Linear Discriminant Analysis 0.6260 0.5382 0.0348 0.0800 0.0485 0.0335 0.0389 0.0340
dt Decision Tree Classifier 0.6164 0.5000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0310
rf Random Forest Classifier 0.6164 0.7890 0.0000 0.0000 0.0000 0.0000 0.0000 0.0790
ada Ada Boost Classifier 0.6164 0.5000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0350
gbc Gradient Boosting Classifier 0.6164 0.5000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0530
lightgbm Light Gradient Boosting Machine 0.6164 0.5183 0.0000 0.0000 0.0000 0.0000 0.0000 0.0790
dummy Dummy Classifier 0.6164 0.5000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0320
qda Quadratic Discriminant Analysis 0.5938 0.4486 0.1000 0.0387 0.0558 0.0000 0.0000 0.0280
svm SVM - Linear Kernel 0.5651 0.6070 0.3915 0.5018 0.3121 0.0717 0.1066 0.0310

Krok 5: Wyświetlenie informacji o najlepszym modelu¶

Sprawdźmy, jaki model został wybrany jako najlepszy.

In [5]:
# Wyświetlamy nazwę wybranego modelu
# best_model to zmienna zawierająca najlepszy algorytm z poprzedniego kroku
print("Najlepszy model:")
print(best_model)
Najlepszy model:
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=1000,
                   multi_class='auto', n_jobs=None, penalty='l2',
                   random_state=123, solver='lbfgs', tol=0.0001, verbose=0,
                   warm_start=False)

Krok 6: Dokładna ocena najlepszego modelu¶

Sprawdźmy dokładnie, jak dobrze działa nasz najlepszy model. Zobaczymy różne metryki (miary jakości), w tym accuracy (dokładność).

In [ ]:
# evaluate_model() - pokazuje szczegółowe informacje o jakości modelu
# Wyświetli różne wykresy i tabele z wynikami
# Najważniejsze to "Accuracy" - procent poprawnych przewidywań

evaluate_model(best_model)
interactive(children=(ToggleButtons(description='Plot Type:', icons=('',), options=(('Pipeline Plot', 'pipelin…

Krok 6.5: Zapisanie modelu do pliku¶

Teraz zapiszemy wytrenowany model do pliku, żeby móc go użyć później bez ponownego trenowania. Dzięki temu nie musimy za każdym razem uczyć modelu od nowa - możemy go po prostu wczytać z pliku.

In [8]:
# save_model() - zapisuje wytrenowany model do pliku
# Po zapisaniu możemy go wczytać w przyszłości bez ponownego trenowania
# model_name='models/best_model' - zapisuje w folderze 'models' jako 'best_model.pkl'

save_model(best_model, model_name='models/best_model')
print("Model został zapisany do pliku: models/best_model.pkl")
Transformation Pipeline and Model Successfully Saved
Model został zapisany do pliku: models/best_model.pkl

Krok 7: Predykcje na danych testowych¶

Teraz użyjemy naszego modelu do przewidzenia, kto przeżył katastrofę Titanica. Model sprawdzi dane testowe (których nie widział podczas treningu) i powie, czy dana osoba przeżyła czy nie.

In [7]:
# predict_model() - używa naszego modelu do przewidywania wyników
# best_model - nasz najlepszy wytrenowany model
# Funkcja zwróci tabelę z oryginalnymi danymi + kolumną 'prediction_label' (przewidywania: 0 lub 1)

predictions = predict_model(best_model)

# Wyświetlamy pierwsze 10 przewidywań
print("Przykładowe przewidywania (prediction_label: 0=nie przeżył, 1=przeżył):")
predictions.head(10)
  Model Accuracy AUC Recall Prec. F1 Kappa MCC
0 Logistic Regression 0.8209 0.8545 0.6699 0.8313 0.7419 0.6072 0.6155
Przykładowe przewidywania (prediction_label: 0=nie przeżył, 1=przeżył):
Out[7]:
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Survived prediction_label prediction_score
178 179 2 Hale, Mr. Reginald male 30.0 0 0 250653 13.000000 NaN S 0 0 0.7672
457 458 1 Kenyon, Mrs. Frederick R (Marion) female NaN 1 0 17464 51.862499 D21 S 1 1 0.8192
16 17 3 Rice, Master. Eugene male 2.0 4 1 382652 29.125000 NaN Q 0 0 0.8888
95 96 3 Shorney, Mr. Charles Joseph male NaN 0 0 374910 8.050000 NaN S 0 0 0.8654
120 121 2 Hickman, Mr. Stanley George male 21.0 2 0 S.O.C. 14879 73.500000 NaN S 0 0 0.8395
677 678 3 Turja, Miss. Anna Sofia female 18.0 0 0 4138 9.841700 NaN S 1 1 0.6303
512 513 1 McGough, Mr. James Robert male 36.0 0 0 PC 17473 26.287500 E25 S 1 0 0.6146
561 562 3 Sivic, Mr. Husein male 40.0 0 0 349251 7.895800 NaN S 0 0 0.8971
356 357 1 Bowerman, Miss. Elsie Edith female 22.0 0 1 113505 55.000000 E33 S 1 1 0.9254
430 431 1 Bjornstrom-Steffansson, Mr. Mauritz Hakan male 28.0 0 0 110564 26.549999 C52 S 1 0 0.5563

Podsumowanie¶

✅ Gotowe!

Stworzyliśmy model uczenia maszynowego, który przewiduje, czy pasażer Titanica przeżył katastrofę.

Co zrobiliśmy:

  1. Wczytaliśmy dane pasażerów Titanica
  2. PyCaret automatycznie przetestował wiele różnych algorytmów
  3. Wybraliśmy najlepszy model (ten z najwyższą dokładnością)
  4. Model może teraz przewidywać przeżycie na podstawie danych o pasażerze (wiek, płeć, klasa biletu, itp.)

Accuracy (dokładność) to procent poprawnych przewidywań - im wyższy, tym lepiej!