Close Menu
    Trending
    • Amazon Layoffs Impact Books Division: Goodreads, Kindle
    • Not Everything Needs Automation: 5 Practical AI Agents That Deliver Enterprise Value
    • AI Just Dated Ancient Scrolls Without Destroying Them. That’s Kind of a Miracle! | by Mallory Twiss | Jun, 2025
    • Descending The Corporate Ladder: A Solution To A Better Life
    • How Shoott Found a Customer Base It Wasn’t Expecting
    • The Role of Luck in Sports: Can We Measure It?
    • The LLM Control Trilogy: From Tuning to Architecture, an Insider’s Look at Taming AI | by Jessweb3 | Jessweb3 Notes | Jun, 2025
    • Your Business Needs Better Images. This AI Editor Delivers.
    Finance StarGate
    • Home
    • Artificial Intelligence
    • AI Technology
    • Data Science
    • Machine Learning
    • Finance
    • Passive Income
    Finance StarGate
    Home»Machine Learning»Basic Feature Discovering for Machine Learning | by Sefza Auma Tiang Alam | Jun, 2025
    Machine Learning

    Basic Feature Discovering for Machine Learning | by Sefza Auma Tiang Alam | Jun, 2025

    FinanceStarGateBy FinanceStarGateJune 6, 2025No Comments14 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Telegram Email
    Share
    Facebook Twitter LinkedIn Pinterest Email


    Bagaimana Characteristic Engineering Bekerja Pada Information

    Information Engineering adalah bagian dari Information Science yang sangat penting.

    Characteristic Engineering adalah proses dimana kita menerapkan pengetahuan yang kita punya untuk mendapatkan informasi yang lebih dari information yang kita punya. Contohnya dari KTP seseorang, anda sebenarnya dapat mendapatkan domisili, pembuatan KTP, tanggal lahir, usia, dan jenis kelamin. Anda dapat menggolongkan orang-orang dengan kategori yang sama untuk membuat machine studying lebih mudah membedakan ciri orang.

    Di pembahasan kali ini kita akan menggunakan dataset titanic yang sangat terkenal dan sering digunakan. Dataset ini berasal dari Kaggle yang terdiri dari 2 file, titanic_train.csv dan titanic_test.csv.

    Langkah-langkah yang akan kita lakukan:

    Library yang kita akan gunakan antara lain:

    • pandas untuk proses dataframe dan csv
    • matplotlib untuk plotting grafik
    • seaborn untuk plotting grafik
    • sklearn untuk machine studying mannequin
    • string untuk proses string
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    sns.set(fashion="darkgrid")
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.preprocessing import OneHotEncoder, LabelEncoder, StandardScaler
    from sklearn.metrics import roc_curve, auc
    from sklearn.model_selection import StratifiedKFold

    import string
    import warnings
    warnings.filterwarnings("ignore", class=DeprecationWarning)

    Dataset ini Berisi information dari semua orang yang ikut di dalam Kapal Titanic ratusan tahun yang lalu.

    1. Buat Perform concat_df digunakan untuk menggabungkan dua dataset/dataframe dari 2 csv menjadi satu dataframe

    2. Untuk memasukkan csv ke dalam Pandas Dataframe, kita harus menggunakan pd.read_csv()
    Information prepare kita masukkan ke df_train dan Information take a look at kita masukkan ke df_test. df_all adalah gabungan dari kedua dataframe.

    3. Kita dapat menamai tiap dataframe dengan memberikan “identify” untuk masing-masing dataframe dengan cara

    4. dfs adalah listing yang berisi kedua dataframe.

    import pandas as pd
    def concat_df(train_data, test_data):
    # Returns a concatenated df of coaching and take a look at set
    return pd.concat([train_data, test_data], type=True).reset_index(drop=True)

    df_train = pd.read_csv('https://storage.googleapis.com/dqlab-dataset/problem/feature-engineering/titanic_train.csv')
    df_test = pd.read_csv('https://storage.googleapis.com/dqlab-dataset/problem/feature-engineering/titanic_test.csv')
    df_all = concat_df(df_train, df_test)

    df_train.identify = 'Coaching Set'
    df_test.identify = 'Take a look at Set'
    df_all.identify = 'All Set'

    dfs = [df_train, df_test]

    • PassengerId adalah id pada row, maka tidak ada pengaruh terhadap goal yang dicari
    • Survived adalah goal yang akan diprediksi, nilai 0 = Not Survived dan nilai 1 = Survived
    • Pclass (Passenger Class) adalah kategori stage sosial ekonomi penumpang dengan nilai (1, 2 atau 3):

    1 = Higher Class

    2 = Center Class

    3 = Decrease Class

    • Identify, Intercourse dan Age merupakan information self-explanatory
    • SibSp adalah jumlah saudara dari penumpang
    • Parch adalah jumlah Orang Tua dan anak dari penumpang
    • Ticket adalah jumlah tiket penumpang
    • Fare adalah tarif yang di kenakan kepada penumpang
    • Cabin adalah nomor kabin penumpang
    • Embarked adalah pelabuhan pemberangkatan ada 3 pelabuhan (C, Q atau S):

    C = Cherbourg

    Q = Queenstown

    S = Southampton

    Untuk mengetahui bentuk dari dataframe kita, berapa banyak row dan column yang ada di dalamnya, kita dapat menggunakan .form.
    contoh:

    df.form #untuk mengeluarkan array yang berisi row dan column
    df.form[0] #untuk mendapatkan row
    df.form[1] #untuk mendapatkan column
    1. Untuk bagian […1…] isilah untuk mendapatkan jumlah row pada dataframe df_train
    2. Untuk bagian […2…] isilah untuk mendapatkan jumlah row pada dataframe df_test
    3. Untuk bagian […3…] isilah untuk mendapatkan jumlah row dan column pada dataframe df_train
    4. Untuk bagian […4…] isilah untuk mendapatkan jumlah row pada dataframe df_train pada column Survived
    5. Untuk bagian […5…] isilah untuk mendapatkan jumlah row dan column pada dataframe df_test
    6. Untuk bagian […6…] isilah untuk mendapatkan jumlah row pada dataframe df_test
    7. Untuk bagian […7…] isilah untuk mendapatkan column yang terdapat pada df_train dengan menggunakan .columns
    8. Untuk bagian […8…] isilah untuk mendapatkan column yang terdapat pada df_test dengan menggunakan .columns
    print('Variety of Coaching Examples = {}'.format(df_train.form[0]))
    print('Variety of Take a look at Examples = {}n'.format(df_test.form[0]))
    print('Coaching X Form = {}'.format(df_train.form))
    print('Coaching y Form = {}n'.format(df_train['Survived'].form[0]))
    print('Take a look at X Form = {}'.format(df_test.form))
    print('Take a look at y Form = {}n'.format(df_test.form[0]))
    print(df_train.columns)
    print(df_test.columns)

    Salah satu cara untuk menemukan Lacking worth pada information Anda dapat menggunakan

    .information(memory_usage=False)

    Untuk mencari korelasi antar kolom pada sebuah dataframe, Anda dapat menggunakan corr().abs()

    df_train_corr = df_train.corr().abs()
    print(df_train_corr.to_string())

    Apabila Anda melihat desk ini Anda akan mengetahui korelasi antar kolom. Korelasi dapat ditentukan dengan mendekati nilai 1 untuk korelasi optimistic dan nilai -1 untuk korelasi terbalik.

    Pada information ini dapat dilihat bahwa goal variable kita Survived sangat besar korelasinya dengan Pclass dan Fare. Sedangkan Age sangat berkaitan dengan Pclass, Sibling Partner (SibSp), Father or mother Youngsters (Parch).

    Dapat diasumsikan bahwa kebanyakan orang yang selamat adalah orang dengan PClass atas dan Tuanya umur seseorang dapat dikatakan dia akan membawa saudara/orang tua/anak/pasangan.

    Dan Fare (harga) tentu saja berkaitan dengan Pclass (kelas penumpang) seorang penumpang.

    Perhatikan perform display_missing. Perform tersebut digunakan untuk mengetahui jumlah lacking worth dari setiap kolom.

    def display_missing(df):    
    for col in df.columns.tolist():
    print('{} column lacking values: {}'.format(col, df[col].isnull().sum()))
    print('n')

    for df in dfs:
    print('{}'.format(df.identify))
    display_missing(df)

    Hasilnya akan seperti di bawah ini

    Coaching Set
    PassengerId column lacking values: 0
    Survived column lacking values: 0
    Pclass column lacking values: 0
    Identify column lacking values: 0
    Intercourse column lacking values: 0
    Age column lacking values: 177
    SibSp column lacking values: 0
    Parch column lacking values: 0
    Ticket column lacking values: 0
    Fare column lacking values: 0
    Cabin column lacking values: 687
    Embarked column lacking values: 2

    Take a look at Set
    PassengerId column lacking values: 0
    Pclass column lacking values: 0
    Identify column lacking values: 0
    Intercourse column lacking values: 0
    Age column lacking values: 86
    SibSp column lacking values: 0
    Parch column lacking values: 0
    Ticket column lacking values: 0
    Fare column lacking values: 1
    Cabin column lacking values: 327
    Embarked column lacking values: 0

    Untuk mengisi information Age yang kosong, karena kita mengetahui bahwa Umur seseorang berkaitan dengan Kelas penumpangnya, kita dapat mengisinya dengan nilai tengah umur seseorang di dalam kelas tersebut dan berdasar jenis kelaminnya.

    Jadi kita lakukan groupby terhadap Jenis Kelamin dan Kelas Penumpang, lalu isi nilai tersebut ke dalam lacking worth yang ada di dalam information kita.

    age_by_pclass_sex = df_all.groupby(['Sex', 'Pclass']).median()['Age']

    for pclass in vary(1, 4):
    for intercourse in ['female', 'male']:
    print('Median age of Pclass {} {}s: {}'.format(pclass, intercourse, age_by_pclass_sex[sex][pclass]))
    print('Median age of all passengers: {}'.format(df_all['Age'].median()))

    # Filling the lacking values in Age with the medians of Intercourse and Pclass teams
    df_all['Age'] = df_all.groupby(['Sex', 'Pclass'])['Age'].apply(lambda x: x.fillna(x.median()))

    Hasilnya akan seperti di bawah ini:

    Median age of Pclass 1 females: 36.0
    Median age of Pclass 1 males: 42.0
    Median age of Pclass 2 females: 28.0
    Median age of Pclass 2 males: 29.5
    Median age of Pclass 3 females: 22.0
    Median age of Pclass 3 males: 25.0
    Median age of all passengers: 28.0

    Kita juga harus mengisi nilai yang hilang untuk kolom Embarked dan Fare.

    Untuk Embarked, kebanyakan orang dari Titanic berangkat dari Southampton/S, sehingga kita dapat mengisinya dengan S saja. Ini lebih baik daripada membiarkan datanya kosong.

    Untuk Fare, kita tahu bahwa Fare sangat berkaitan dengan Kelas Penumpang, Jumlah Father or mother/Youngsters, dan Jumlah Sibling/Partner. Sehingga kita dapat mengisinya dengan nilai tengah dari orang yang berada di grup tersebut.

    import pandas as pd

    def concat_df(train_data, test_data):
    return pd.concat([train_data, test_data], type=True).reset_index(drop=True)

    df_train = pd.read_csv('https://storage.googleapis.com/dqlab-dataset/problem/feature-engineering/titanic_train.csv')
    df_test = pd.read_csv('https://storage.googleapis.com/dqlab-dataset/problem/feature-engineering/titanic_test.csv')
    df_all = concat_df(df_train, df_test)
    df_train.identify = 'Coaching Set'
    df_test.identify = 'Take a look at Set'
    df_all.identify = 'All Set'
    dfs = [df_train, df_test]

    age_by_pclass_sex = df_all.groupby(['Sex', 'Pclass']).median()['Age']
    df_all['Age'] = df_all.groupby(['Sex', 'Pclass'])['Age'].apply(lambda x: x.fillna(x.median()))

    # Ketikkan kode yang dicontohkan
    # Filling the lacking values in Embarked with S
    df_all['Embarked'] =df_all ['Embarked'].fillna('S')

    med_fare = df_all.groupby(['Pclass', 'Parch', 'SibSp']).Fare.median()[3][0][0]
    # Filling the lacking worth in Fare with the median Fare of third class alone passenger
    df_all['Fare'] = df_all['Fare'].fillna(med_fare)

    cat_features = ['Embarked', 'Parch', 'Pclass', 'Sex', 'SibSp']

    fig, axs = plt.subplots(ncols=2, nrows=3, figsize=(20, 20))
    plt.subplots_adjust(proper=1.5, prime=1.25)

    for i, function in enumerate(cat_features, 1):
    plt.subplot(2, 3, i)
    sns.countplot(x=function, hue='Survived', information=df_train)

    plt.xlabel('{}'.format(function), dimension=20, labelpad=15)
    plt.ylabel('Passenger Depend', dimension=20, labelpad=15)
    plt.tick_params(axis='x', labelsize=20)
    plt.tick_params(axis='y', labelsize=20)

    plt.legend(['Not Survived', 'Survived'], loc='higher heart', prop={'dimension': 18})
    plt.title('Depend of Survival in {} Characteristic'.format(function), dimension=20, y=1.05)

    plt.tight_layout()
    plt.present()

    Dari plot yang dihasikan kita dapat melihat, ternyata penumpang yang berangkat dari Cherbourg lebih banyak yang selamat, sedangkan penumpang dari Southampton, hanya setengahnya yang selamat.

    Untuk orang yang membawa hanya 1 Father or mother/Youngsters, lebih banyak yang selamat.

    Untuk orang dengan Kelas Penumpang 1, kemungkinan selamatnya jauh lebih tinggi. Dan penumpang dengan Kelas Penumpang 3 hanya sedikit yang selamat.

    Dan Orang yang membawa 1 Sibling/Partner kemungkinan selamatnya jauh lebih besar.

    Orang yang membawa 2 Sibling/Partner kemungkinan selamatnya cukup kecil.

    Untuk Information Fare dan Age, kita akan membaginya ke dalam beberapa Bin/Group.

    Dari fungsi describe sebelumnya, kita tahu bahwa minimal usia yang ada adalah 0.17 tahun dan yang tertua adalah 80 tahun. Sehingga saya rasa membaginya dengan 13 kelompok quantile cukup.

    Dan untuk Fare termurah adalah 0 dan termahal adalah 512 (lihat hasil statistik dekriptifnya). Sehingga saya rasa membaginya dengan 10 kelompok quantile cukup.

    Perintah yang pertama bermaksud untuk membagi Fare menjadi 13 bagian dengan fungsi qcut().

    Dan perintah yang kedua adalah untuk menggambarkan plot group usia terhadap tingkat keselamatan.

    Dapat dilihat bahwa semakin mahal harga tiketnya, semakin besar kemungkinan orang itu selamat, dimulai dari harga 56 ke atas.

    Tetapi banyak orang yang selamat dimulai dari 10.5 sudah cukup meningkat, kecuali kejadian yang terjadi pada kelompok pemegang tiket berharga 13–15.742.

    Observe:

    Untuk pembagian jumlah bins yang berbeda baik 13 bins untuk “Age” dan 10 bins untuk “Fare” tidak aturan bakunya. Tetapi yang diinginkan dari visualisasi berdasarkan pembagian dengan jumlah bins adalah sebaran informationnya.

    Sebagai contoh untuk “Age” yang memiliki vary information 0 (min) s/d 80 (max). Untuk itu, awalnya membagi information menjadi 8 bins katakanlah cukup untuk mereprsentasikan sebaran information. Ketika setelah dicek dengan visualisasi sebarannya belum mewakili dan adanya skew. Selanjutnya, kita dapat menaikkan/menurunkan jumlah bins untuk melihat sebaran information berikut. Untuk “Age” ini terpilihlah 13 bins yang cocok untuk mepresentasikan sebaran information. Dengan cara yang sama dapat juga diterapkan untuk “Fare”.

    Jadi tidak ada aturan baku yang mengatur jumlah bins tersebut.

    df_all['Fare'] = pd.qcut(df_all['Fare'], 13)
    fig, axs = plt.subplots(figsize=(22, 9))
    sns.countplot(x='Fare', hue='Survived', information=df_all)

    plt.xlabel('Fare', dimension=15, labelpad=20)
    plt.ylabel('Passenger Depend', dimension=15, labelpad=20)
    plt.tick_params(axis='x', labelsize=10)
    plt.tick_params(axis='y', labelsize=15)

    plt.legend(['Not Survived', 'Survived'], loc='higher proper', prop={'dimension': 15})
    plt.title('Depend of Survival in {} Characteristic'.format('Fare'), dimension=15, y=1.05)

    plt.tight_layout()
    plt.present()

    Characteristic Engineering adalah tentang membuat fitur baru dari fitur yang sudah ada.

    Dari sini kita akan membuat beberapa fitur baru yang bertujuan menaikkan akurasi dari mannequin machine studying kita.

    Fitur pertama yang kita buat adalah Family_Size, sesuai namanya ini adalah gabungan dari Father or mother, Youngsters, Sibling, dan Partner. Lalu kita tambahkan 1 dengan asumsi menghitung diri orang itu juga.

    df_all['Family_Size'] = df_all['SibSp'] + df_all['Parch'] + 1

    Untuk melihat nilai distinct dari Family_Size, anda dapat menjalankan perintah:

    df_all['Family_Size'].distinctive()

    Fitur kedua yang kita buat adalah menggabungkan Family_Size dengan groupnya masing-masing tergantung jumlahnya.

    Kategorinya adalah seperti berikut.

    • Household Dimension 1 = Alone
    • Household Dimension 2, 3 dan 4 = Small
    • Household Dimension 5 dan 6 = Medium
    • Household Dimension 7, 8 dan 11 = Giant
    df_all['Family_Size_Grouped'] = df_all['Family_Size'].map(family_map)

    Setelah itu kita gambarkan plotnya.

    Anda perhatikan code pada livecode dan jalankan. Pada plot menjelaskan bahwa orang dengan Family_Size 2,3,4 mempunyai kemungkinan selamat lebih besar, selebihnya kemungkinannya menurun dan orang yang pergi dengan Family_Size_Grouped Small lebih terlihat mempunyai tingkat keselamatan lebih besar.

    df_all['Family_Size'] = df_all['SibSp'] + df_all['Parch'] + 1

    fig, axs = plt.subplots(figsize=(20, 20), ncols=2, nrows=2)
    plt.subplots_adjust(proper=1.5)

    sns.barplot(x=df_all['Family_Size'].value_counts().index, y=df_all['Family_Size'].value_counts().values, ax=axs[0][0])
    sns.countplot(x='Family_Size', hue='Survived', information=df_all, ax=axs[0][1])

    axs[0][0].set_title('Household Dimension Characteristic Worth Counts', dimension=20, y=1.05)
    axs[0][1].set_title('Survival Counts in Household Dimension ', dimension=20, y=1.05)

    family_map = {1: 'Alone', 2: 'Small', 3: 'Small', 4: 'Small', 5: 'Medium', 6: 'Medium', 7: 'Giant', 8: 'Giant', 11: 'Giant'}
    df_all['Family_Size_Grouped'] = df_all['Family_Size'].map(family_map)

    sns.barplot(x=df_all['Family_Size_Grouped'].value_counts().index, y=df_all['Family_Size_Grouped'].value_counts().values, ax=axs[1][0])
    sns.countplot(x='Family_Size_Grouped', hue='Survived', information=df_all, ax=axs[1][1])

    axs[1][0].set_title('Household Dimension Characteristic Worth Counts After Grouping', dimension=20, y=1.05)
    axs[1][1].set_title('Survival Counts in Household Dimension After Grouping', dimension=20, y=1.05)

    for i in vary(2):
    axs[i][1].legend(['Not Survived', 'Survived'], loc='higher proper', prop={'dimension': 20})
    for j in vary(2):
    axs[i][j].tick_params(axis='x', labelsize=20)
    axs[i][j].tick_params(axis='y', labelsize=20)
    axs[i][j].set_xlabel('')
    axs[i][j].set_ylabel('')
    plt.tight_layout()
    plt.present()

    Kita buat function baru bernama Ticket_Frequency dengan nilai gabungan dari Ticket yang sama. Contoh sebelumnya akan bernilai 6, karena ada 6 ticket yang sama dalam information kita.

    Pada hasil plot penjelasannya function Family_Size_Grouped, di angka 2,3,4 kemungkinan tingkat selamatnya meningkat.

    Kenapa function ini berbeda dari Family_Size_Grouped? Karena bisa jadi ada pembantu, teman yang menggunakan tiket yang sama tetapi tidak terhitung sebagai keluarga.

    df_all['Family_Size'] = df_all['SibSp'] + df_all['Parch'] + 1

    family_map = {1: 'Alone', 2: 'Small', 3: 'Small', 4: 'Small', 5: 'Medium', 6: 'Medium', 7: 'Giant', 8: 'Giant', 11: 'Giant'}
    df_all['Family_Size_Grouped'] = df_all['Family_Size'].map(family_map)

    df_all['Ticket_Frequency'] = df_all.groupby('Ticket')['Ticket'].remodel('depend')

    fig, axs = plt.subplots(figsize=(12, 9))
    sns.countplot(x='Ticket_Frequency', hue='Survived', information=df_all)

    plt.xlabel('Ticket Frequency', dimension=15, labelpad=20)
    plt.ylabel('Passenger Depend', dimension=15, labelpad=20)
    plt.tick_params(axis='x', labelsize=15)
    plt.tick_params(axis='y', labelsize=15)

    plt.legend(['Not Survived', 'Survived'], loc='higher proper', prop={'dimension': 15})
    plt.title('Depend of Survival in {} Characteristic'.format('Ticket Frequency'), dimension=15, y=1.05)
    plt.tight_layout()
    plt.present()

    Jika anda lihat pada contoh di atas, dari nama orang yang ada di dataset ini, semuanya mempunyai pola yang sama, yaitu:

    [Nama_belakang], [Jabatan]. [Nama_depan]

    sehingga kita bisa mengambil jabatannya saja dengan mengambil kata setelah “,” (koma) dan sebelum “.” (titik). Fungsi .break up() akan membagi kalimat menjadi beberapa kata dengan key phrase tertentu, dan dapat diambil dengan index [ ]

    [Braund, Mr. , Owen Harris]

    Lalu fungsi lakukan break up untuk bagian kedua yang akan menghasilkan:

    [Mr, Owen Harris]

    Lalu kita ambil index 0 alias yang pertama sehingga akan mendapatkan Mr

    Dari sini kita bisa membuat fitur baru dengan nama ‘Title’ yang berisi jabatan seseorang.

    Jabatan yang paling umum di sini adalah Mr, Mrs. , dan Miss.

    Sehingga kita bisa mengetahui standing menikah seseorang dari Mrs.

    Kita bisa membuat fitur baru lagi yaitu ‘Is_Married’

    Fitur ini adalah jika seseorang mempunyai jabatan ‘Mrs’ , berarti dia sudah menikah.

    Lalu kita buat grafik plot nya

    Setelah melakukan df_all[‘Title’].distinctive()

    Ternyata ada banyak sekali jabatan lain, dan kita mengelompokkannya menjadi satu pada konten berikutnya

    [‘Miss’, ‘Mrs’,’Ms’, ‘Mlle’, ‘Lady’, ‘Mme’, ‘the Countess’, ‘Dona’] akan kita ubah menjadi ‘Miss/Mrs/Ms’

    [‘Dr’, ‘Col’, ‘Major’, ‘Jonkheer’, ‘Capt’, ‘Sir’, ‘Don’, ‘Rev’] menjadi ‘Dr/Navy/Noble/Clergy’

    df_all['Title'] = df_all['Name'].str.break up(', ', increase=True)[1].str.break up('.', increase=True)[0]

    print(df_all['Title'].distinctive())

    df_all['Is_Married'] = 0
    df_all['Is_Married'].loc[df_all['Title'] == 'Mrs'] = 1

    print(df_all['Title'].distinctive())

    Ketikan perintah di bawah ini:

    dan jalankan.

    df_all['Title'] = df_all['Title'].substitute(['Miss', 'Mrs','Ms', 'Mlle', 'Lady', 'Mme', 'the Countess', 'Dona'], 'Miss/Mrs/Ms')
    df_all['Title'] = df_all['Title'].substitute(['Dr', 'Col', 'Major', 'Jonkheer', 'Capt', 'Sir', 'Don', 'Rev'], 'Dr/Navy/Noble/Clergy')

    Bagian ini adalah bagian mengubah [‘Miss’, ‘Mrs’,’Ms’, ‘Mlle’, ‘Lady’, ‘Mme’, ‘the Countess’, ‘Dona’] akan kita ubah menjadi ‘Miss/Mrs/Ms’ [‘Dr’, ‘Col’, ‘Major’, ‘Jonkheer’, ‘Capt’, ‘Sir’, ‘Don’, ‘Rev’] menjadi ‘Dr/Navy/Noble/Clergy’

    fig, axs = plt.subplots(nrows=2, figsize=(20, 20))
    sns.barplot(x=df_all['Title'].value_counts().index, y=df_all['Title'].value_counts().values, ax=axs[0])

    axs[0].tick_params(axis='x', labelsize=10)
    axs[1].tick_params(axis='x', labelsize=15)

    for i in vary(2):
    axs[i].tick_params(axis='y', labelsize=15)

    axs[0].set_title('Title Characteristic Worth Counts', dimension=20, y=1.05)

    df_all['Title'] = df_all['Title'].substitute(['Miss', 'Mrs','Ms', 'Mlle', 'Lady', 'Mme', 'the Countess', 'Dona'], 'Miss/Mrs/Ms')
    df_all['Title'] = df_all['Title'].substitute(['Dr', 'Col', 'Major', 'Jonkheer', 'Capt', 'Sir', 'Don', 'Rev'], 'Dr/Navy/Noble/Clergy')

    sns.barplot(x=df_all['Title'].value_counts().index, y=df_all['Title'].value_counts().values, ax=axs[1])
    axs[1].set_title('Title Characteristic Worth Counts After Grouping', dimension=20, y=1.05)

    plt.tight_layout()
    plt.present()

    Untuk melihat apa saja yang telah dilakukan dalam Characteristic Engineering, Anda dapat melihat dengan menggunakan head().

    Pada bagian ini Anda keluarkan 5 baris awal pada dataframe all (df_all).

    print(df_all.head(5))

    Yang kita inginkan adalah menaikkan akurasi dari mannequin kita dengan Characteristic Engineering.

    Pertanyaan nya apakah benar kita bisa menaikkan akurasi modelnya?

    Bagian ini akan menjawab hasilnya.

    df_train = df_all.loc[:890]
    df_test = df_all.loc[891:]
    dfs = [df_train, df_test]

    Perintah pertama bertujuan untuk membagi kembali dataset kita menjadi prepare dan take a look at

    non_numeric_features = ['Embarked', 'Sex', 'Title', 'Family_Size_Grouped', 'Age', 'Fare']
    for df in dfs:
    for function in non_numeric_features:
    df[feature] = LabelEncoder().fit_transform(df[feature])

    Perintah kedua adalah LabelEncoder untuk information” yang bersifat non-numeric, tujuannya adalah melakukan encoding [0-n] untuk information kategorikal. Contohnya Intercourse, akan dirubah menjadi 0 dan 1, laki-laki dan perempuan.

    cat_features = ['Pclass', 'Sex', 'Embarked', 'Title', 'Family_Size_Grouped']
    encoded_features = []
    for df in dfs:
    for function in cat_features:
    encoded_feat = OneHotEncoder().fit_transform(df[feature].values.reshape(-1, 1)).toarray()
    n = df[feature].nunique()
    cols = ['{}_{}'.format(feature, n) for n in range(1, n + 1)]
    encoded_df = pd.DataFrame(encoded_feat, columns=cols)
    encoded_df.index = df.index
    encoded_features.append(encoded_df)
    df_train = pd.concat([df_train, *encoded_features[:5]], axis=1)
    df_test = pd.concat([df_test, *encoded_features[5:]], axis=1)

    Perintah ketiga bertujuan untuk mengubah function kategori menjadi one sizzling, dengan OneHotEncoder. Akan menghasilkan beberapa kolom tergantung banyaknya kategori.

    Contohnya Pclass akan menjadi 3 kolom Pclass_1, Pclass_2, dan Pclass_3. Isinya adalah 0 dan 1 tergantung kategori orang tersebut

    df_train = df_all.loc[:890]
    df_test = df_all.loc[891:]
    dfs = [df_train, df_test]

    non_numeric_features = ['Embarked', 'Sex', 'Title', 'Family_Size_Grouped', 'Age', 'Fare']

    for df in dfs:
    for function in non_numeric_features:
    df[feature] = LabelEncoder().fit_transform(df[feature])

    cat_features = ['Pclass', 'Sex', 'Embarked', 'Title', 'Family_Size_Grouped']
    encoded_features = []

    for df in dfs:
    for function in cat_features:
    encoded_feat = OneHotEncoder().fit_transform(df[feature].values.reshape(-1, 1)).toarray()
    n = df[feature].nunique()
    cols = ['{}_{}'.format(feature, n) for n in range(1, n + 1)]
    encoded_df = pd.DataFrame(encoded_feat, columns=cols)
    encoded_df.index = df.index
    encoded_features.append(encoded_df)

    df_train = pd.concat([df_train, *encoded_features[:5]], axis=1)
    df_test = pd.concat([df_test, *encoded_features[5:]], axis=1)

    Kita akan melakukan drop terhadap kolom-kolom yang tidak kita perlukan, atau yang sudah kita encode sebelumnya. Ketikkanlah kode berikut setelah baris komentar: # Silakan diketikkan kodenya di sini

    df_all = concat_df(df_train, df_test)
    drop_cols = ['Cabin', 'Embarked', 'Family_Size', 'Family_Size_Grouped', 'Survived', 'Name', 'PassengerId', 'Pclass', 'Sex', 'Ticket', 'Title']
    df_all.drop(columns=drop_cols, inplace=True)print(df_all.head())
    df_all = concat_df(df_train, df_test)
    drop_cols = ['Cabin', 'Embarked', 'Family_Size', 'Family_Size_Grouped', 'Survived', 'Name', 'PassengerId', 'Pclass', 'Sex', 'Ticket', 'Title']

    df_all.drop(columns=drop_cols, inplace=True)

    print(df_all.head())

    Ketikkan perintah di bawah ini mulai di baris ke-63

    X_train = StandardScaler().fit_transform(df_train.drop(columns=drop_cols))
    y_train = df_train['Survived'].values
    X_test = StandardScaler().fit_transform(df_test.drop(columns=drop_cols))
    print('X_train form: {}'.format(X_train.form))
    print('y_train form: {}'.format(y_train.form))
    print('X_test form: {}'.format(X_test.form))

    Setelah kita membagi prepare dan take a look at untuk modelling seperti ini, kita akan melakukan modelling

    X_train = StandardScaler().fit_transform(df_train.drop(columns=drop_cols))
    y_train = df_train['Survived'].values
    X_test = StandardScaler().fit_transform(df_test.drop(columns=drop_cols))

    print('X_train form: {}'.format(X_train.form))
    print('y_train form: {}'.format(y_train.form))
    print('X_test form: {}'.format(X_test.form))

    Kita akan menggunakan RandomForestClassifier dari SkLearn dan menghitung akurasi menggunakan cross_val_score

    from sklearn.ensemble import RandomForestClassifier
    random_forest = RandomForestClassifier(criterion='gini',
    n_estimators=1100,
    max_depth=5,
    min_samples_split=4,
    min_samples_leaf=5,
    max_features='auto',
    oob_score=True,
    random_state=50)
    random_forest.match(X_train, y_train)
    from sklearn.model_selection import cross_val_score
    scores = cross_val_score(random_forest, X_train, y_train, cv=10, scoring = "accuracy")
    print("Scores:", scores)
    print("Imply:", scores.imply())
    print("Normal Deviation:", scores.std())

    Hasil akurasi nya dengan menggunakan function dari function engineering adalah sekitar 0.832 sesuai di gambar

    Sekarang kita akan modelling lagi tanpa menyertakan fitur yang sudah kita buat.

    Ketikkan semua kode yang ada di bawah ini mulai dari baris 59

    df_all = concat_df(df_train, df_test)
    drop_cols = ['Cabin', 'Embarked', 'Family_Size', 'Family_Size_Grouped', 'Survived',
    'Name', 'PassengerId', 'Pclass', 'Sex', 'Ticket', 'Title',
    'Family_Size_Grouped_1', 'Family_Size_Grouped_2', 'Family_Size_Grouped_3', 'Family_Size_Grouped_4',
    'Ticket_Frequency', 'Title_1', 'Title_2', 'Title_3', 'Title_4', 'Is_Married']
    df_all.drop(columns=drop_cols, inplace=True)print(df_all.head())
    X_train = StandardScaler().fit_transform(df_train.drop(columns=drop_cols))
    y_train = df_train['Survived'].values
    X_test = StandardScaler().fit_transform(df_test.drop(columns=drop_cols))
    print('X_train form: {}'.format(X_train.form))
    print('y_train form: {}'.format(y_train.form))
    print('X_test form: {}'.format(X_test.form))

    Masukan perintah berikut

    from sklearn.ensemble import RandomForestClassifier
    random_forest = RandomForestClassifier(criterion='gini',
    n_estimators=1100,
    max_depth=5,
    min_samples_split=4,
    min_samples_leaf=5,
    max_features='auto',
    oob_score=True,
    random_state=50)
    random_forest.match(X_train, y_train)
    from sklearn.model_selection import cross_val_score
    scores = cross_val_score(random_forest, X_train, y_train, cv=10, scoring = "accuracy")
    print("Scores:", scores)
    print("Imply:", scores.imply())
    print("Normal Deviation:", scores.std())

    dengan output

    Akurasi yang diperoleh melalui pemodelan tanpa function engineering adalah 0.81258. Nilai ini lebih rendah 0.02 atau 2% dari pemodelan dengan penggunaan function engineering.

    Ini artinya bahwa penggunaan function engineering dapat menaikkan akurasi mannequin. Karena, fitur turunan (fitur yang direkayasa) melalui teknik function engineering ini memiliki dampak yang signifikan pada mannequin yang dibangun. Denga kata lain, function engineering merupakan hal yang terpenting dilakukan untuk meningkatkan performansi mannequin machine studying.

    Observe: Akurasi ini tidak absolut dan dapat berubah, tergantung dari banyak issue, termasuk dari parameter yang dimasukkan. Fitur yang kita buat pun dapat menjadi buruk juga tergantung tipe mannequin yang digunakan.

    Hasil perbandingan dari 2 mannequin tersebut seperti di bawah ini:

    Konklusi:

    Characteristic Engineering mengharuskan kita membuat banyak ide fitur dari information yang sudah ada.

    Biasanya yang dapat kita lakukan adalah, penggabungan (grouping), ekstraksi fitur (seperti Title yang didapat dari nama orang), dan masih banyak lagi.

    Jangan malas untuk melakukan function engineering dan mencoba segala sesuatu yang ada di pikiran kita. Barangkali ini dapat meningkatkan akurasi mannequin kita.



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Previous ArticleHere Are the 10 Highest-Paying New-Collar Jobs, No Degree
    Next Article Micro-Retirement? Quit Your Job Before You’re a Millionaire
    FinanceStarGate

    Related Posts

    Machine Learning

    AI Just Dated Ancient Scrolls Without Destroying Them. That’s Kind of a Miracle! | by Mallory Twiss | Jun, 2025

    June 6, 2025
    Machine Learning

    The LLM Control Trilogy: From Tuning to Architecture, an Insider’s Look at Taming AI | by Jessweb3 | Jessweb3 Notes | Jun, 2025

    June 6, 2025
    Machine Learning

    LLMs + Democracy = Accuracy. How to trust AI-generated answers | by Thuwarakesh Murallie | Jun, 2025

    June 6, 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Top Posts

    AI Is Transforming the Workplace — Including Social Media Marketing. Here’s How Businesses Can Actually Use It.

    February 16, 2025

    당신이 보는 첫 화면은 어떻게 정해질까? 무신사 홈 배너 개인화 추천 이야기 | by 방효석 Hyoseok | MUSINSA tech | Jun, 2025

    June 1, 2025

    News Bytes 20250428: TSMC’s A14 Fab, Intel’s New CEO: ‘We Need to Change’

    April 30, 2025

    Current XAI techniques. Explainable AI (XAI) techniques, such… | by TechTecT- Laldas | Mar, 2025

    March 15, 2025

    Data Masking for Test Environments: Best Practices

    March 21, 2025
    Categories
    • AI Technology
    • Artificial Intelligence
    • Data Science
    • Finance
    • Machine Learning
    • Passive Income
    Most Popular

    AI Isn’t Lulling Us to Sleep – It’s Forcing Us to Wake Up to What Consciousness Really Is | by Brendan Baker | Mar, 2025

    March 22, 2025

    R.E.D.: Scaling Text Classification with Expert Delegation

    March 21, 2025

    Talk to Videos | Towards Data Science

    March 27, 2025
    Our Picks

    Entrepreneur+ Subscribers-Only Event | March 26: This Stealth Mode Strategy Can Turn Your Side Hustle into a Six-Figure Success

    March 8, 2025

    The Future Isn’t Waiting-So Why Are You?

    February 18, 2025

    Understanding the Power of Sequence-to-Sequence Models in NLP | by Faizan Saleem Siddiqui | Mar, 2025

    March 20, 2025
    Categories
    • AI Technology
    • Artificial Intelligence
    • Data Science
    • Finance
    • Machine Learning
    • Passive Income
    • Privacy Policy
    • Disclaimer
    • Terms and Conditions
    • About us
    • Contact us
    Copyright © 2025 Financestargate.com All Rights Reserved.

    Type above and press Enter to search. Press Esc to cancel.