0% found this document useful (0 votes)
7 views26 pages

Airlanes Booking Analys

Uploaded by

nur Maajid
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views26 pages

Airlanes Booking Analys

Uploaded by

nur Maajid
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 26

###Muhammad Nur Maajid_1103228145

###Mohammad Jody Hermawan_1103228241


###Khairi Hibatullah Ridho_1103228240
###Struktur Dataset
1. num_passengers = number of passengers travelling
1. sales_channel = sales channel booking was made on
2. trip_type = trip Type (Round Trip, One Way, Circle Trip)
3. purchase_lead = number of days between travel date and booking date
4. length_of_stay = number of days spent at destination
5. flight_hour = hour of flight departure
6. flight_day = day of week of flight departure
7. route = origin -> destination flight route
8. booking_origin = country from where booking was made
9. wants_extra_baggage = if the customer wanted extra baggage in the booking
10. wants_preferred_seat = if the customer wanted a preferred seat in the booking
11. wants_in_flight_meals = if the customer wanted in-flight meals in the booking
12. flight_duration = total duration of flight (in hours)
13. booking_complete = flag indicating if the customer completed the booking
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from google.colab import drive

drive.mount('/content/drive')
data_path = '/content/drive/MyDrive/Dataset/customer_booking.csv'
df = pd.read_csv(data_path, encoding='latin1')

Drive already mounted at /content/drive; to attempt to forcibly remount, call


drive.mount("/content/drive", force_remount=True).

df.head()

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 50000 entries, 0 to 49999
Data columns (total 14 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 num_passengers 50000 non-null int64
1 sales_channel 50000 non-null object
2 trip_type 50000 non-null object
3 purchase_lead 50000 non-null int64
4 length_of_stay 50000 non-null int64
5 flight_hour 50000 non-null int64
6 flight_day 50000 non-null object
7 route 50000 non-null object
8 booking_origin 50000 non-null object
9 wants_extra_baggage 50000 non-null int64
10 wants_preferred_seat 50000 non-null int64
11 wants_in_flight_meals 50000 non-null int64
12 flight_duration 50000 non-null float64
13 booking_complete 50000 non-null int64
dtypes: float64(1), int64(8), object(5)
memory usage: 5.3+ MB

# Check the data types of each column


df.dtypes

num_passengers int64
sales_channel object
trip_type object
purchase_lead int64
length_of_stay int64
flight_hour int64
flight_day object
route object
booking_origin object
wants_extra_baggage int64
wants_preferred_seat int64
wants_in_flight_meals int64
flight_duration float64
booking_complete int64
dtype: object

# Get summary statistics for numerical columns


df.describe()

# Check for missing values


df.isnull().sum()
num_passengers 0
sales_channel 0
trip_type 0
purchase_lead 0
length_of_stay 0
flight_hour 0
flight_day 0
route 0
booking_origin 0
wants_extra_baggage 0
wants_preferred_seat 0
wants_in_flight_meals 0
flight_duration 0
booking_complete 0
dtype: int64

# Check unique values for categorical columns


print(df['sales_channel'].value_counts())
print(df['trip_type'].value_counts())
print(df['booking_origin'].value_counts())
print(df['route'].value_counts())

sales_channel
Internet 44382
Mobile 5618
Name: count, dtype: int64
trip_type
RoundTrip 49497
OneWay 387
CircleTrip 116
Name: count, dtype: int64
booking_origin
Australia 17872
Malaysia 7174
South Korea 4559
Japan 3885
China 3387
...
Panama 1
Tonga 1
Tanzania 1
Bulgaria 1
Svalbard & Jan Mayen 1
Name: count, Length: 104, dtype: int64
route
AKLKUL 2680
PENTPE 924
MELSGN 842
ICNSIN 801
DMKKIX 744
...
LBUTPE 1
CXRMEL 1
DELKBR 1
KOSSYD 1
MRUXIY 1
Name: count, Length: 799, dtype: int64

# Check the correlation between numerical columns


numeric_columns = df.select_dtypes(include=['int64', 'float64']).columns
correlation_matrix = df[numeric_columns].corr()
print(correlation_matrix)

num_passengers purchase_lead length_of_stay \


num_passengers 1.000000 0.212606 -0.115850
purchase_lead 0.212606 1.000000 -0.076560
length_of_stay -0.115850 -0.076560 1.000000
flight_hour 0.015607 0.035973 -0.024872
wants_extra_baggage 0.120404 -0.022207 0.176757
wants_preferred_seat 0.028544 -0.004499 0.032264
wants_in_flight_meals 0.022943 -0.022653 0.098828
flight_duration -0.063169 0.067866 0.141181
booking_complete 0.024116 -0.022131 -0.042408

flight_hour wants_extra_baggage wants_preferred_seat


\
num_passengers 0.015607 0.120404 0.028544

purchase_lead 0.035973 -0.022207 -0.004499

length_of_stay -0.024872 0.176757 0.032264

flight_hour 1.000000 -0.011434 0.012171

wants_extra_baggage -0.011434 1.000000 0.207669

wants_preferred_seat 0.012171 0.207669 1.000000

wants_in_flight_meals 0.013014 0.216470 0.315088

flight_duration -0.002101 0.057054 0.101289

booking_complete 0.007127 0.068139 0.050116

wants_in_flight_meals flight_duration \
num_passengers 0.022943 -0.063169
purchase_lead -0.022653 0.067866
length_of_stay 0.098828 0.141181
flight_hour 0.013014 -0.002101
wants_extra_baggage 0.216470 0.057054
wants_preferred_seat 0.315088 0.101289
wants_in_flight_meals 1.000000 0.154312
flight_duration 0.154312 1.000000
booking_complete 0.026511 -0.106266

booking_complete
num_passengers 0.024116
purchase_lead -0.022131
length_of_stay -0.042408
flight_hour 0.007127
wants_extra_baggage 0.068139
wants_preferred_seat 0.050116
wants_in_flight_meals 0.026511
flight_duration -0.106266
booking_complete 1.000000

1. numeric_columns = df.select_dtypes(include=['int64',
'float64']).columns: Baris ini mengidentifikasi kolom-kolom dalam dataframe
yang memiliki tipe data numerik, seperti int64 dan float64, dan menyimpan nama-
nama kolom tersebut dalam variabel numeric_columns.

1. correlation_matrix = df[numeric_columns].corr() : Kode ini membuat matriks


korelasi dengan menggunakan metode corr() pada subset dataframe yang hanya
terdiri dari kolom-kolom numerik (numeric_columns). Matriks korelasi ini akan
berisi koefisien korelasi antara setiap pasangan kolom numerik dalam dataframe.

2. print(correlation_matrix): Baris ini mencetak matriks korelasi ke konsol atau


output. Matriks ini akan menampilkan koefisien korelasi antara setiap pasangan
kolom numerik dalam dataframe, di mana nilai korelasi dapat berkisar dari -1
hingga 1. Nilai positif menunjukkan korelasi positif (saat satu variabel naik, yang
lainnya cenderung naik juga), nilai negatif menunjukkan korelasi negatif (saat satu
variabel naik, yang lainnya cenderung turun), dan nilai mendekati nol menunjukkan
korelasi yang lemah atau tidak ada korelasi antara kedua variabel tersebut.
# Set the style for seaborn
sns.set(style="whitegrid")

# Sales channel distribution


plt.figure(figsize=(10, 6))
sns.countplot(x='sales_channel', data=df)
plt.title('Distribution of Sales Channels')
plt.xlabel('Sales Channel')
plt.ylabel('Count')
plt.show()
# Trip type distribution
plt.figure(figsize=(10, 6))
sns.countplot(x='trip_type', data=df)
plt.title('Distribution of Trip Types')
plt.xlabel('Trip Type')
plt.ylabel('Count')
plt.show()
# Flight day distribution
plt.figure(figsize=(10, 6))
sns.countplot(x='flight_day', data=df)
plt.title('Distribution of Flight Days')
plt.xlabel('Flight Day')
plt.ylabel('Count')
plt.show()

# Flight hour distribution


plt.figure(figsize=(10, 6))
sns.countplot(x='flight_hour', data=df)
plt.title('Distribution of Flight Hours')
plt.xlabel('Flight Hour')
plt.ylabel('Count')
plt.show()
# Relationship between sales channel and flight duration
plt.figure(figsize=(10, 6))
sns.boxplot(x='sales_channel', y='flight_duration', data=df)
plt.title('Sales Channel vs. Flight Duration')
plt.xlabel('Sales Channel')
plt.ylabel('Flight Duration')
plt.show()
# Relationship between trip type and number of passengers
plt.figure(figsize=(10, 6))
sns.boxplot(x='trip_type', y='num_passengers', data=df)
plt.title('Trip Type vs. Number of Passengers')
plt.xlabel('Trip Type')
plt.ylabel('Number of Passengers')
plt.show()
# Relationship between trip type and flight duration
plt.figure(figsize=(10, 6))
sns.boxplot(x='trip_type', y='flight_duration', data=df)
plt.title('Trip Type vs. Flight Duration')
plt.xlabel('Trip Type')
plt.ylabel('Flight Duration (hours)')
plt.show()
# Relationship between booking completion and flight duration
plt.figure(figsize=(10, 6))
sns.boxplot(x='booking_complete', y='flight_duration', data=df)
plt.title('Booking Completion vs. Flight Duration')
plt.xlabel('Booking Completion')
plt.ylabel('Flight Duration (hours)')
plt.xticks([0, 1], ['Not Complete', 'Complete'])
plt.show()
# Relationship between booking completion and number of passengers
plt.figure(figsize=(10, 6))
sns.boxplot(x='booking_complete', y='num_passengers', data=df)
plt.title('Booking Completion vs. Number of Passengers')
plt.xlabel('Booking Completion')
plt.ylabel('Number of Passengers')
plt.xticks([0, 1], ['Not Complete', 'Complete'])
plt.show()
plt.figure(figsize=(10, 6))
sns.scatterplot(x='purchase_lead', y='flight_duration', hue='sales_channel',
data=df)
plt.title('Purchase Lead Time vs. Flight Duration')
plt.xlabel('Purchase Lead Time (days)')
plt.ylabel('Flight Duration (hours)')
plt.legend(title='Sales Channel')
plt.show()
Klasifikasi
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.cluster import KMeans
import numpy as np
import statsmodels.api as sm
from statsmodels.formula.api import ols

# Mengkodekan variabel kategorikal


label_encoders = {}
categorical_columns = ['sales_channel', 'trip_type', 'flight_day', 'route',
'booking_origin']
for col in categorical_columns:
le = LabelEncoder()
df[col] = le.fit_transform(df[col])
label_encoders[col] = le

# Menangani nilai yang hilang (jika ada)


df.fillna(df.mean(), inplace=True) # Mengganti nilai NaN dengan mean dari
setiap kolom

1. Mengkodekan variabel kategorikal menggunakan LabelEncoder: Variabel


kategorikal perlu diubah menjadi representasi numerik agar dapat digunakan dalam
model pembelajaran mesin. LabelEncoder dari scikit-learn digunakan di sini untuk
mengonversi nilai kategorikal menjadi bilangan bulat. Setiap nilai kategori akan
diubah menjadi bilangan bulat unik. Ini memungkinkan model untuk memahami
hubungan ordinal antara kategori.

1. Menangani nilai yang hilang: Baris ini menangani nilai yang hilang dalam
dataframe. Metode fillna() digunakan untuk mengganti nilai-nilai yang hilang
(NaN) dengan mean dari setiap kolom. Ini adalah salah satu pendekatan umum
untuk menangani nilai yang hilang, dengan mengisi nilai yang hilang dengan nilai
rata-rata dari kolom yang bersangkutan.
# Memilih fitur dan target
X = df[['sales_channel', 'trip_type', 'purchase_lead', 'flight_duration',
'route', 'booking_origin']]
y = df['booking_complete']

# Membagi data menjadi train dan test set


X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42)

# Membangun dan melatih model RandomForest


model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

RandomForestClassifier(random_state=42)

# Evaluasi model
predictions = model.predict(X_test)
print(classification_report(y_test, predictions))
print(confusion_matrix(y_test, predictions))

precision recall f1-score support

0 0.88 0.92 0.90 8520


1 0.35 0.25 0.29 1480

accuracy 0.82 10000


macro avg 0.61 0.58 0.59 10000
weighted avg 0.80 0.82 0.81 10000

[[7830 690]
[1113 367]]

Hasil Evaluasi Model


Confusion Matrix
Confusion matrix mengilustrasikan secara detail prediksi model dibandingkan dengan label
sebenarnya.
Format:
[[True Negatives (TN), False Positives (FP)], [False Negatives (FN), True Positives (TP)]]
Nilai yang diperoleh:
True Negatives: 7830 - Model memprediksi kelas 0 (negatif) dengan benar sebanyak 7830
kali.
False Positives: 690 - Model salah memprediksi kelas 1 (positif) ketika sebenarnya adalah
kelas 0.
False Negatives: 1113 - Model salah memprediksi kelas 0 ketika sebenarnya adalah kelas 1.
True Positives:
367 - Model memprediksi kelas 1 (positif) dengan benar sebanyak 367 kali.
Metrik Kinerja
Precision: Proporsi prediksi positif yang benar-benar positif.
 Kelas 0: 0.88 (model sangat akurat untuk kelas negatif)
 Kelas 1: 0.35 (model kurang akurat untuk kelas positif)
Recall: Kemampuan model untuk mengidentifikasi semua kasus positif.
 Kelas 0: 0.92 (model sangat baik mengidentifikasi kelas negatif)
 Kelas 1: 0.25 (model kurang baik dalam mengidentifikasi kelas positif)
F1-score: Harmonik mean dari precision dan recall.
 Kelas 0: 0.90 (kinerja baik)
 Kelas 1: 0.29 (kinerja kurang)
Support: Jumlah sampel sebenarnya untuk setiap kelas.
 Kelas 0: 8520 sampel
 Kelas 1: 1480 sampel
Metrik Agregat
Accuracy: Proporsi prediksi yang benar dari keseluruhan prediksi yang dibuat (0.82 atau
82%).
Macro average: Rata-rata dari precision, recall, dan f1-score untuk setiap kelas (0.61, 0.58,
0.59).
Weighted average: Rata-rata yang dibobotkan berdasarkan jumlah sampel dari masing-
masing kelas (0.80, 0.82, 0.81).
Interpretasi
Model berkinerja cukup baik dalam memprediksi kelas mayoritas (kelas 0) tetapi kurang
efektif dalam memprediksi kelas minoritas (kelas 1).
Akurasi keseluruhan cukup tinggi (82%), tetapi kinerja model terhadap kelas 1
menunjukkan bahwa model kurang sensitif terhadap deteksi positif.
Diperlukan pendekatan seperti resampling, penyesuaian bobot kelas, atau optimasi
threshold untuk meningkatkan sensitivitas model terhadap kelas minoritas.
feature_importances = model.feature_importances_
indices = np.argsort(feature_importances)[::-1] # Mengurutkan fitur
berdasarkan pentingnya

# Membuat plot
plt.figure(figsize=(10, 6))
plt.title('Feature Importances by RandomForest Model')
colors = plt.cm.viridis(np.linspace(0, 1, len(X.columns))) # Menggunakan
colormap untuk warna
bars = plt.bar(range(len(X.columns)), feature_importances[indices],
color=colors, align='center')

# Menambahkan legenda yang menunjukkan fitur terpenting


top_features = [X.columns[i] for i in indices[:5]] # Asumsikan kita ingin
menonjolkan 5 fitur teratas
top_bars = [bars[i] for i in range(5)]
plt.legend(top_bars, top_features, title="Top 5 Features")

# Label untuk sumbu x


plt.xticks(range(len(X.columns)), [X.columns[i] for i in indices],
rotation=90)
plt.xlabel('Features')
plt.ylabel('Importance')

# Menampilkan dan menyimpan grafik


plt.tight_layout()
plt.savefig('feature_importance_plot.png')
plt.show()
Feature Importances
 purchase_lead: Fitur ini memiliki tingkat kepentingan yang paling tinggi (lebih dari
0.5). Ini berarti bahwa waktu yang berlalu antara pencarian dan pembelian memiliki
dampak yang sangat besar terhadap prediksi model. Fitur ini mungkin
mencerminkan faktor seperti keputusan impulsif atau perencanaan yang matang
dari pembeli.

 route: Fitur ini memiliki tingkat kepentingan yang sedang (sekitar 0.2). Jalur yang
diambil mungkin mempengaruhi keputusan pembelian berdasarkan faktor-faktor
seperti durasi, biaya, atau preferensi rute.

 booking_origin: Kepentingan fitur ini relatif lebih rendah dibandingkan dengan dua
fitur sebelumnya (sekitar 0.1). Hal ini menunjukkan bahwa asal mula booking
memiliki pengaruh tetapi tidak sekuat fitur lain dalam memprediksi hasil.

 flight_duration, sales_channel, trip_type: Fitur-fitur ini memiliki kepentingan


yang paling rendah dalam model. Ini menunjukkan bahwa durasi penerbangan,
saluran penjualan, dan tipe perjalanan tidak berpengaruh besar terhadap keputusan
model dalam prediksi yang dilakukan.

variabel-variabel yang dipilih untuk memprediksi apakah pemesanan akan lengkap


(booking_complete) didasarkan pada pertimbangan-pertimbangan berikut:
1. sales_channel: Saluran penjualan bisa mempengaruhi kesuksesan pemesanan
karena saluran yang berbeda mungkin memiliki tingkat layanan yang berbeda,
penawaran khusus, atau tingkat kepercayaan yang berbeda dari pelanggan.
Misalnya, pemesanan yang dilakukan melalui internet mungkin memiliki tingkat
keberhasilan yang berbeda dibandingkan dengan yang dibuat melalui agen atau
kantor penjualan langsung.

1. trip_type: Jenis perjalanan (misalnya perjalanan satu arah vs. perjalanan pulang
pergi) mungkin terkait dengan peluang penyelesaian pemesanan. Perjalanan pulang
pergi mungkin lebih kompleks dan memiliki potensi masalah yang lebih tinggi yang
bisa berakibat pada pembatalan.

2. purchase_lead: Waktu antara pemesanan dan tanggal keberangkatan (lead time)


bisa menjadi indikator penting. Pemesanan yang dilakukan jauh-jauh hari
sebelumnya mungkin lebih sering dibatalkan atau diubah, sedangkan pemesanan
mendekati tanggal keberangkatan mungkin lebih pasti.

3. flight_duration: Durasi penerbangan mungkin mempengaruhi keputusan


pelanggan terkait keberlanjutan pemesanan, terutama jika terdapat masalah seperti
durasi yang terlalu lama yang mungkin tidak diinginkan oleh pelanggan atau durasi
yang terlalu singkat yang mungkin dianggap tidak efisien.

4. route: Rute penerbangan bisa sangat berpengaruh karena beberapa rute mungkin
memiliki lebih banyak masalah logistik atau operasional yang bisa berdampak pada
keberhasilan pemesanan. Rute-rute tertentu mungkin juga lebih populer atau
memiliki tingkat permintaan yang lebih tinggi yang bisa mempengaruhi probabilitas
pembatalan.

5. booking_origin: Asal pemesanan (misalnya negara atau wilayah geografis dari


mana pemesanan dilakukan) bisa memberikan wawasan mengenai preferensi
pelanggan dan perilaku pemesanan, yang berbeda-beda tergantung pada lokasi.

Regresi Logistik
# Mengkodekan variabel kategorikal
label_encoders = {}
categorical_columns = ['sales_channel', 'trip_type', 'flight_day', 'route',
'booking_origin']
for col in categorical_columns:
le = LabelEncoder()
df[col] = le.fit_transform(df[col])
label_encoders[col] = le

# Menangani nilai yang hilang (jika ada)


df.fillna(df.mean(), inplace=True) # Mengganti nilai NaN dengan mean dari
setiap kolom

# Memilih fitur dan target


X = df[['sales_channel', 'trip_type', 'purchase_lead', 'flight_duration',
'route', 'booking_origin']]
y = df['booking_complete']

# Standardisasi fitur untuk meningkatkan kinerja model regresi


scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Membagi data menjadi train dan test set


X_train, X_test, y_train, y_test = train_test_split(X_scaled, y,
test_size=0.2, random_state=42)

# Membangun dan melatih model regresi logistik


model = LogisticRegression()
model.fit(X_train, y_train)

LogisticRegression()

# Evaluasi model
predictions = model.predict(X_test)
print("Classification Report:")
print(classification_report(y_test, predictions))
print("Confusion Matrix:")
print(confusion_matrix(y_test, predictions))

Classification Report:
precision recall f1-score support

0 0.85 1.00 0.92 8520


1 0.00 0.00 0.00 1480

accuracy 0.85 10000


macro avg 0.43 0.50 0.46 10000
weighted avg 0.73 0.85 0.78 10000

Confusion Matrix:
[[8520 0]
[1480 0]]

/usr/local/lib/python3.10/dist-packages/sklearn/metrics/
_classification.py:1344: UndefinedMetricWarning: Precision and F-score are
ill-defined and being set to 0.0 in labels with no predicted samples. Use
`zero_division` parameter to control this behavior.
_warn_prf(average, modifier, msg_start, len(result))
/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:13
44: UndefinedMetricWarning: Precision and F-score are ill-defined and being
set to 0.0 in labels with no predicted samples. Use `zero_division` parameter
to control this behavior.
_warn_prf(average, modifier, msg_start, len(result))
/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:13
44: UndefinedMetricWarning: Precision and F-score are ill-defined and being
set to 0.0 in labels with no predicted samples. Use `zero_division` parameter
to control this behavior.
_warn_prf(average, modifier, msg_start, len(result))

Confusion Matrix
 True Negatives (TN): 8520 - Ini menunjukkan bahwa model berhasil
mengidentifikasi semua sampel kelas 0 (negatif) dengan benar.
 False Positives (FP): 0 - Tidak ada kasus di mana model salah mengklasifikasikan
kelas 0 sebagai kelas 1.
 True Positives (TP): 0 - Model tidak berhasil mengidentifikasi satupun kelas 1
(positif) dengan benar.
 False Negatives (FN): 1480 - Semua sampel kelas 1 dianggap oleh model sebagai
kelas 0.
Classification Report
 Precision untuk Kelas 1 adalah 0.00: Ini menunjukkan bahwa model tidak
memiliki kemampuan untuk mengidentifikasi kelas positif sama sekali.
 Recall untuk Kelas 1 juga 0.00: Artinya, dari semua kasus positif yang sebenarnya,
model tidak mengidentifikasi satupun dari mereka dengan benar.
 F1-Score untuk Kelas 1 adalah 0.00: F1-score adalah rata-rata harmonik dari
precision dan recall, dan skor 0 di sini menegaskan lagi bahwa model gagal total
dalam mengidentifikasi kelas 1.
 Precision, Recall, dan F1-score untuk Kelas 0 cukup tinggi: Ini mengindikasikan
bahwa model sangat efisien dalam mengidentifikasi kelas 0 tetapi pada biaya
mengabaikan kelas 1.
Analisis Umum
Model yang digunakan memiliki kinerja yang sangat bias ke arah kelas mayoritas (kelas 0)
dan gagal total dalam mengklasifikasikan kelas minoritas (kelas 1). Kinerja seperti ini
sering kali terjadi jika:
1. Model Kurang Fit: Model mungkin terlalu sederhana (underfit) sehingga tidak bisa
menangkap kompleksitas dalam data untuk kelas 1.
1. Data Tidak Seimbang: Jika dataset sangat tidak seimbang (lebih banyak sampel
untuk kelas 0), model bisa menjadi bias dan hanya belajar untuk selalu memprediksi
kelas mayoritas.
2. Label Kelas Mungkin Salah atau Tidak Konsisten: Terkadang masalah dalam
data itu sendiri, seperti label yang tidak konsisten atau salah, bisa menyebabkan
model tidak dapat belajar dengan efektif.
coef = model.coef_[0]
indices = np.argsort(np.abs(coef))[::-1] # Mengurutkan koefisien berdasarkan
nilai absolutnya

# Membuat plot
plt.figure(figsize=(10, 6))
plt.title('Coefficient Importance in Logistic Regression')
plt.bar(range(X_train.shape[1]), coef[indices], color='salmon',
align='center')
plt.xticks(range(X_train.shape[1]), [X.columns[i] for i in indices],
rotation=90)
plt.xlabel('Features')
plt.ylabel('Coefficient Value')
plt.tight_layout()
plt.show()

Detail Koefisien dari Grafik


 booking_origin: Koefisien paling tinggi dan positif. Ini berarti fitur ini sangat
mempengaruhi hasil positif dalam model. Misalnya, jika model ini digunakan untuk
memprediksi kemungkinan pembelian, maka "booking_origin" yang tinggi
meningkatkan peluang pembelian.
 flight_duration: Koefisien negatif yang cukup signifikan. Hal ini menunjukkan
bahwa semakin lama durasi penerbangan, semakin menurun peluang untuk target
positif. Dalam kasus prediksi pembelian, ini bisa berarti bahwa penerbangan yang
lebih lama cenderung mengurangi peluang pembelian.
 sales_channel: Koefisien negatif. Ini menunjukkan bahwa nilai tinggi pada
"sales_channel" mungkin menurunkan peluang terjadinya hasil positif.
 trip_type: Koefisien positif yang moderat, menunjukkan pengaruh positif terhadap
target.
 route, purchase_lead: Kedua fitur ini memiliki koefisien negatif moderat, yang
berarti nilai tinggi pada fitur-fitur ini cenderung mengarahkan model untuk
memprediksi kelas 0 atau mengurangi peluang untuk hasil positif.

AdaBoostClassifier &XGBoost
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
import xgboost as xgb
from sklearn.metrics import accuracy_score,confusion_matrix
from sklearn.ensemble import AdaBoostClassifier
from sklearn import preprocessing
from sklearn.pipeline import Pipeline
from sklearn import decomposition
from tqdm.notebook import tqdm
from sklearn import cluster
from sklearn import metrics
from sklearn import mixture
from sklearn import model_selection

sales_channel_counts = df['sales_channel'].value_counts()

plt.figure(figsize=(8, 6)) # Set the size of the figure


plt.pie(sales_channel_counts, labels=sales_channel_counts.index,
autopct='%1.1f%%', startangle=140)

plt.axis('equal')
plt.title('Distribution by Sales Channel')
plt.show()
df =
pd.get_dummies(df,columns=['sales_channel','trip_type','flight_day','route',
'booking_origin'],drop_first = True)

x=df.drop('wants_extra_baggage',axis=1)
y=df['wants_extra_baggage']

x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.7,random_stat
e=10)

model = xgb.XGBClassifier(objective='multi:softmax', num_class=2)

model.fit(x_train, y_train)
y_pred = model.predict(x_test)

accuracy = accuracy_score(y_test, y_pred)


print(accuracy)

0.7306

cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, cmap='Blues', fmt='g', xticklabels=['Class 0',
'Class 1'], yticklabels=['Class 0', 'Class 1'])
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.title('Confusion Matrix')
plt.show()
ada_classifier = AdaBoostClassifier(n_estimators=50, random_state=42)

ada_classifier.fit(x_train, y_train)

y_pred = ada_classifier.predict(x_test)

accuracy = accuracy_score(y_test, y_pred)


print("Accuracy:", accuracy)

Accuracy: 0.724

cm = confusion_matrix(y_test, y_pred)

plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, cmap='Blues', fmt='g', xticklabels=['Class 0',
'Class 1'], yticklabels=['Class 0', 'Class 1'])
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.title('Confusion Matrix')
plt.show()
# Model ANOVA
model = ols('wants_extra_baggage ~ flight_hour', data=df).fit()

# Hasil ANOVA
anova_table = sm.stats.anova_lm(model, typ=2)
print(anova_table)

sum_sq df F PR(>F)
flight_hour 1.447921 1.0 6.537088 0.010568
Residual 11074.217659 49998.0 NaN NaN

anova_model = ols('flight_duration ~ sales_channel_1', data=df).fit()


anova_t = sm.stats.anova_lm(anova_model, typ=2)

# Print the ANOVA table


print(anova_t)

sum_sq df F PR(>F)
sales_channel_1 167.166110 1.0 74.717791 5.588170e-18
Residual 111860.522805 49998.0 NaN NaN

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy