Cara menggunakan dummy variable trap python

Sulit untuk menyimpulkan apa yang Anda cari dari pertanyaan tersebut, tetapi dugaan terbaik saya adalah sebagai berikut.

Jika kita asumsikan Anda memiliki DataFrame di mana beberapa kolomnya adalah 'Kategori' dan berisi bilangan bulat (atau pengidentifikasi unik lainnya) untuk kategori, maka kita dapat melakukan hal berikut.

Panggil DataFrame dfrm, dan asumsikan bahwa untuk setiap baris, dfrm['Category'] adalah beberapa nilai dalam himpunan bilangan bulat dari 1 sampai N. Kemudian,

Sekarang akan ada kolom indikator baru untuk setiap kategori yang bernilai Benar/Salah, tergantung pada apakah data dalam baris tersebut berada dalam kategori tersebut.

untuk menghasilkan kolom-kolom dengan nama-nama tertentu, bukan hanya konversi string dari nilai-nilai kategori. Bahkan, untuk beberapa tipe, str() mungkin tidak akan menghasilkan sesuatu yang berguna bagi Anda.

Module ini merupakan lanjutan dari module “Statistic using Python for Data Science”. Module ini akan memberikan pembelajaran lebih lanjut tentang metode statistik yang digunakan dalam mengolah data dengan menggunakan bahasa pemrograman python.

Photo by Barbare Kacharava on Unsplash

Data Visualisasi

Visualisasi data adalah tahapan yang sangat penting dalan melakukan analisa data. Hal ini karena beberapa pola yang terdapat pada data tidak dapat semata-mata digambarkan hanya dengan angka semata. Dengan melakukan visualisasi pada data, hal ini dapat membuat data menjadi lebih menyenangkan untuk dilihat dan lebih mudah untuk dipahami.

Diagram Pencar (Scatter Plot)

Diagram pencar adalah salah satu visualisasi data sederhana yang dapat digunakan untuk menggambarkan hubungan antara variabel numerik dengan variabel numerik lainnya. Selain itu diagram pencar dapat digunakan untuk melihat pola-pola pengelompokkan pada data, biasanya digunakan pada analisa segmentasi.

https://www.learnbyexample.org/Sumber Gambar: https://nikkimarinsek.com

Untuk menggambar scatter plot kita dapat menggunakan method .plot.scatter() pada pandas atau menggunakan .scatter() pada matplotlib.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.clf()
## mengambil data contoh
raw_data = pd.read_csv("https://storage.googleapis.com/dqlab-dataset/dataset_statistic.csv", sep=';')
## melihat isi dari data
print(raw_data)
plt.figure()
# visualisasi diagram pencar untuk variabel 'Pendapatan' dan 'Total' menggunakan 'plot.scatter' dari pandas
raw_data.plot.scatter(x='Pendapatan', y='Total')
plt.title('plot.scatter dari pandas', size=14)
plt.tight_layout()
plt.show()
# visualisasi diagram pencar untuk variabel 'Pendapatan' dan 'Total' menggunakan 'plt.scatter' dari matplotlib
plt.scatter(x='Pendapatan', y='Total', data=raw_data)
plt.title('plt.scatter dari matplotlib', size=14)
plt.tight_layout()
plt.show()

Catatan: Perhatikan bahwa walaupun keduanya mengeluarkan gambar yang sama, namun dapat dilihat bahwa hasil dari plot.scatter lebih lengkap karena terdapat label untuk masing-masing variabel yang secara otomatis dibuat, tidak seperti plt.scatter yang harus ditulis manual.

import matplotlib.pyplot as plt
# visualisasi diagram pencar untuk variabel 'Pendapatan' dan 'Total' menggunakan 'plt.scatter' dari matplotlib.pyplot
plt.scatter(x='Pendapatan', y='Total', data=raw_data)
plt.xlabel('Pendapatan')
plt.ylabel('Total')
plt.show()

Histogram

Histogram adalah salah satu visualisasi yang digunakan untuk melihat bentuk dari distribusi data. Visualisasi ini sangat penting karena dapat menggambarkan apakah suatu data memiliki distribusi tertentu dan apakah data perlu dirubah dahulu untuk memenuhi suatu asumsi, terutama saat melakukan pemodelan liner yang akan dibahas nanti.

Terdapat beberapa pola dari histogram yang biasanya sering muncul ketika menganalisa data yang dapat dilihat pada gambar berikut :

https://www.dummies.com/

Suatu distribusi disebut memiliki skewness positif jika ekor dari distribusi memanjang ke kiri. Kebalikannya, suatu distribusi disebut memiliki skewness negatif jika ekor dari distribusi memanjang ke kanan. Hal ini terjadi karena nilai mean, median dan modus tidak terletak di satu titik sebagaimana yang dapat diamati pada gambar berikut :

https://www.statisticshowto.com/

Untuk menggambar histogram kita dapat menggunakan method .hist() dari pandas atau menggunakan pyplot.hist() dari matplotlib sehingga menghasilkan grafik seperti berikut :

import matplotlib.pyplot as plt
plt.clf()
plt.figure()
# melihat distribusi data kolom 'Pendapatan' menggunakan 'hist' dari pandas
raw_data.hist(column='Pendapatan')
plt.title('.hist dari pandas', size=14)
plt.tight_layout()
plt.show()
plt.figure()
# melihat distribusi data kolom 'Pendapatan' menggunakan 'pyplot.hist' dari matplotlib.pyplot
plt.hist(x='Pendapatan', data=raw_data)
plt.xlabel('Pendapatan')
plt.title('pyplot.hist dari matplotlib.pyplot', size=14)
plt.tight_layout()
plt.show()

Box and Whisker Plot

Box and whisker plot atau yang biasa disebut juga sebagai Box plot adalah salah satu visualisasi data yang dapat digunakan untuk melihat distribusi data, nilai maksimum dan minimum serta nilai kuantil dari data. Box plot dapat digunakan sebagai pengganti dari histogram untuk memahami distribusi dan variasi dari data walaupun bentuk distribusinya tidak terlalu terlihat jelas.

Box plot terdiri box yang lebarnya adalah jarak interkuartil dan whisker yang merupakan rentang antara nilai nilai kuartil bawah/atas dengan nilai minimum dan maksimum.

https://www.simplypsychology.org/

ada bagian ini, kita akan membuat box plot. Ada 2 box plot yang akan dihasilkan.

Menggunakan method .boxplot() dari pandas, gunakan method pyplot.boxplot() dari matplotlib dan menghasilkan grafik.

import matplotlib.pyplot as plt
plt.clf()
# melihat box plot dari kolom 'Pendapatan' menggunakan method '.boxplot' dari pandas
plt.figure()
raw_data.boxplot(column='Pendapatan')
plt.title('.boxplot dari pandas', size=14)
plt.tight_layout()
plt.show()
# melihat box plot dari kolom 'Pendapatan' menggunakan method '.boxplot' dari matplotlib
plt.figure()
plt.boxplot(x = 'Pendapatan', data=raw_data)
plt.xlabel('Pendapatan')
plt.title('pyplot.boxplot dari matplotlib.pyplot', size=14)
plt.tight_layout()
plt.show()

Bar Plot

Diagram batang atau bar plot adalah plot yang digunakan untuk menghitung frekuensi dari data.

ntuk menggambar diagram batang kita dapat menggunakan method .plot.bar() dari pandas, Atau dengan method pyplot.bar() dari matplotlib.

import matplotlib.pyplot as plt
plt.clf()
# hitung frekuensi dari masing-masing nilai pada kolom 'Produk'
class_freq = raw_data['Produk'].value_counts()
# lihat nilai dari class_freq
print(class_freq)
plt.figure()
# membuat bar plot dengan method `plot.bar()` dari pandas
class_freq.plot.bar()
plt.title('.bar dari pandas', size=14)
plt.tight_layout()
plt.show()
plt.figure()
# membuat bar plot dengan method `plt.bar()` dari matplotlib
plt.bar(x=class_freq.index, height=class_freq.values)
plt.title('plt.bar dari matplotlib.pyplot', size=14)
plt.tight_layout()
plt.show()

Pie Chart

Diagram pie atau pie chart adalah plot lainnya yang dapat digunakan untuk menampilkan frekuensi dalam bentuk proporsi, untuk menampilkan diagram pie kita dapat menggunakan pyplot.pie dari matplotlib seperti contoh berikut :

import matplotlib.pyplot as plt
plt.clf()
plt.figure()
# membuat pie chart menggunakan method 'pyplot.pie()' dari matplotlib
plt.pie(class_freq.values, labels=class_freq.index)
plt.title('plt.pie dari matplotlib.pyplot', size=14)
plt.tight_layout()
plt.show()
plt.figure()
# membuat pie chart menggunakan method 'plot.pie' dari pandas
class_freq.plot.pie()
plt.title('plot.pie dari pandas', size=14)
plt.tight_layout()
plt.show()

Transformasi Data

Transformasi data adalah penggunaan fungsi matematika tertentu pada setiap titik data untuk mengubahnya dari suatu nilai ke nilai yang lain. Secara matematis dapat ditulis sebagai berikut :

Penjelasan :

Transformasi biasanya digunakan untuk memenuhi asumsi-asumsi pada model statistika tertentu, misalnya model regresi linier.

Transformasi Data dan Kaitannya dengan Distribusi Data

Transformasi Untuk Data Skew ke Kanan

Perhatikan bahwa variabel Pendapatan memiliki distribusi data dengan skewness ke kanan. Sedangkan variabel seperti Harga memiliki distribusi data dengan skewness ke kiri. Untuk mengubah distribusi data menjadi normal untuk data skew ke kanan kita dapat menggunakan fungsi logaritma, akar kuadrat, akar tiga dan akar resiprokal lainnya. Sedangkan untuk mengubah distribusi data menjadi normal untuk data skew ke kiri kita bisa menggunakan kuadrat, pangkat 3 dan pangkat n.

Untuk menggunakan fungsi-fungsi berikut kita dapat menggunakan method .log(), .sqrt(), .power() dari numpy atau dengan operasi matematika biasa.

from scipy import stats
import matplotlib.pyplot as plt
plt.clf()

plt.figure()
raw_data.hist()
plt.title('Histogram seluruh kolom', size=14)
plt.tight_layout()
plt.show()

plt.figure()
raw_data['Pendapatan'].hist()
plt.title('Histogram pendapatan', size=14)
plt.tight_layout()
plt.show()

plt.figure()
# transformasi menggunakan akar lima
np.power(raw_data['Pendapatan'], 1/5).hist()
plt.title('Histogram pendapatan - ransformasi menggunakan akar lima', size=14)
plt.tight_layout()
plt.show()

# simpan hasil transformasi
pendapatan_akar_lima = np.power(raw_data['Pendapatan'], 1/5)

plt.figure()
# membuat qqplot pendapatan - transformasi menggunakan akar lima
stats.probplot(pendapatan_akar_lima, plot=plt)
plt.title('qqplot pendapatan - transformasi menggunakan akar lima', size=14)
plt.tight_layout()
plt.show()

plt.figure()
# membuat qqplot pendapatan
stats.probplot(raw_data['Pendapatan'], plot=plt)
plt.title('qqplot pendapatan', size=14)
plt.tight_layout()
plt.show()

Transformasi Box-Cox

Salah satu cara yang paling mudah untuk melakukan transformasi secara otomatis adalah dengan menggunakan transformasi Box-Cox, untuk melakukan transformasi Box-Cox, kita dapat menggunakan method .boxcox dari scipy.

from scipy import stats
import matplotlib.pyplot as plt
plt.clf()
hasil, _ = stats.boxcox(raw_data['Pendapatan'])plt.figure()
# Histogram
plt.hist(hasil)
plt.title('Histogram', size=14)
plt.tight_layout()
plt.show()
plt.figure()
# QQPlot
stats.probplot(hasil, plot=plt)
plt.title('qqplot', size=14)
plt.tight_layout()
plt.show()

Transformasi Data Kategorik ke Dalam Angka

Untuk data yang bernilai kategorik agar bisa diolah oleh program harus berupa data berbentuk angka. Hal ini akan menjadi masalah tersendiri jika data yang diterima memiliki banyak sekali data yang bernilai karakter atau string. Untuk menanggulangi hal ini kita bisa menggunakan dummy encoding.

Dummy encoding atau disebut juga sebagai one-hot encoding adalah suatu metode transformasi yang dapat mengubah data bertipe karakter menjadi angka bernilai 1 dan 0 yang menandakan ada atau ketiadaan nilai tersebut pada baris data. Untuk melakukan dummy encoding pada data kita cukup menggunakan method .get_dummies() dari pandas sebagaimana contoh berikut :

print(raw_data['Produk'])data_dummy_produk = pd.get_dummies(raw_data['Produk'])print(data_dummy_produk)

Matriks Korelasi

Matriks korelasi ada visualisasi data yang dapat menampilkan korelasi dari beberapa variabel numerik sekaligus. Untuk membuat korelasi matriks, kita dapat menggunakan method .corr() dari pandas untuk mendapatkan nilai korelasi dari tiap pasang variabel lalu menggunakan pyplot.matshow() dari matplotlib untuk membuat visualisasi.

import seaborn as sns
import matplotlib.pyplot as plt
plt.clf()
# mengatur ukuran gambar/plot
plt.rcParams['figure.dpi'] = 100
plt.figure()
plt.matshow(raw_data.corr())
plt.title('Plot correlation matriks dengan .matshow', size=14)
plt.tight_layout()
plt.show()
plt.figure()
sns.heatmap(raw_data.corr(), annot=True)
plt.title('Plot correlation matriks dengan sns.heatmap', size=14)
plt.tight_layout()
plt.show()

Grouped Box Plot

Misalkan kita memiliki variabel yang digunakan untuk mengelompokkan nilai-nilai tertentu, misalnya variabel seperti gender, kelas, jenis pekerjaan dan variabel-variabel yang umumnya bertipe nominal. Maka kita dapat plot untuk masing-masing grup dengan bantuan grouped plot.

import matplotlib.pyplot as plt
plt.clf()

plt.figure()
# boxplot biasa tanpa pengelompokkan
raw_data.boxplot(rot=90)
plt.title('Boxplot tanpa pengelompokkan', size=14)
plt.tight_layout()
plt.show()

plt.figure()
# box plot dengan pengelompokkan dilakukan oleh kolom 'Produk'
raw_data.boxplot(by='Produk')
plt.tight_layout()
plt.show()

Grouped Histogram

Kita dapat menggabungkan beberapa histogram dengan bantuan method .groupby atau mengelompokkan berdasarkan kolom bertipe kategori melalui nama_dataframe[nama_dataframe['kolom_kategori'] == kategori1] dengan dari pandas lalu menggunakan method .hist() untuk menggambar histogram. Di sini kita akan menghasilkan 5 kelompok kolom.

import matplotlib.pyplot as plt
plt.clf()
plt.figure()
raw_data[raw_data['Produk'] == 'A'].hist()
plt.tight_layout()
plt.show()
plt.figure()
raw_data[raw_data['Produk'] == 'B'].hist()
plt.tight_layout()
plt.show()
plt.figure()
raw_data[raw_data['Produk'] == 'C'].hist()
plt.tight_layout()
plt.show()
plt.figure()
raw_data[raw_data['Produk'] == 'D'].hist()
plt.tight_layout()
plt.show()
plt.figure()
raw_data[raw_data['Produk'] == 'E'].hist()
plt.tight_layout()
plt.show()

Hex Bin Plot

Hex bin plot adalah variasi dari scatter plot yang biasanya digunakan ketika kita mengolah data yang memiliki banyak sekali titik data. Sangat bermanfaat jika kita ingin memvisualisasikan data berukuran sangat besar. Kali ini kita akan coba melihat perbandingan Pendapatan dan Total.

import matplotlib.pyplot as plt
plt.clf()
plt.figure()
raw_data.plot.hexbin(x='Pendapatan', y='Total', gridsize=25, rot=90)
plt.tight_layout()
plt.show()

Scatter Matrix Plot

Scatter matrix plot adalah plot yang digunakan untuk membuat sekumpulan scatter plot dari beberapa pasang variabel. Hal ini sangat bermanfaat terutama ketika ingin menganalisis bagaimana bentuk hubungan antar variabel. Plot ini sangat bermanfaat untuk digunakan untuk data yang ukurannya tidak terlalu besar. Untuk menggunakan scatter matrix kita harus memanggil fungsi scatter_matrix dari pandas.plotting

Perhatikan bahwa diagonal dari scatter matriks adalah histogram dari masing-masing variabel sedangkan sisanya adalah scatter plot dari beberapa pasang variabel.

from pandas.plotting import scatter_matrix
import matplotlib.pyplot as plt
plt.clf()

_, ax = plt.subplots(1, 1, figsize=(10,10))
scatter_matrix(raw_data, ax=ax)
plt.show()

Regresi Linier Sederhana

Regresi linier sederhana atau disebut juga sebagai regresi linier bivariat adalah model statistika yang digunakan untuk melakukan estimasi nilai variabel dependen/variabel tak bebas dengan menggunakan satu variabel independen/variabel bebas. Dengan merumuskan bahwa satu variabel memiliki pengaruh terhadap variabel lain, kita dapat mengukur seberapa besar dan signifikan variabel bebas dalam menentukan nilai variabel tak bebas.

Secara matematis, regresi linier sederhana dapat dirumuskan sebagai berikut :

Penjelasan :

Secara geometris dapat digambarkan sebagai berikut.

Regresi Linier Sederhana Menggunakan Statsmodel

Kita dapat melakukan pemodelan regresi linier sederhana dengan menggunakan statsmodels. statsmodels merupakan satu dari banyak package pada bahasa pemrograman python yang bisa digunakan untuk membantu melakukan pemodelan regresi linier sederhana.

Rumus yang digunakan seperti berikut :

Jika dicontohkan ke dalam bahasa pemrograman, ada beberapa tahapan yang perlu dilakukan.

  1. Membuat dataset dari file dengan format .csv. Menampilkan dataset (https://storage.googleapis.com/dqlab-dataset/dataset_statistic.csv)
  2. Kita akan mengambil variabel ‘Total’ sebagai variabel tak bebas dan variabel ‘Pendapatan’ sebagai variabel bebas. Untuk menambahkan membentuk model yang disertai dengan intercept, kita harus menggunakan method .add_constant() untuk variabel bebas
  3. Selanjutnya kita dapat menggunakan method .OLS untuk membuat model regresi linier sederhana dengan memasukkan parameter endog=variabel_tak_bebas dan exog=variabel_bebas, disambung dengan method .fit()
  4. Untuk melihat hasil dari model kita dapat menggunakan method .summary()

Coefficient, Standard Error, t-Statistics & p-Value & Const

Nilai coef pada hasil summary di atas adalah besaran slope dari model, pada model ini slope untuk variabel Pendapatan. Selain itu terdapat beberapa nilai yang menyertainya yaitu std err yang merupakan nilai kesalahan baku (standard error) dari koefisien tersebut, t-statistics yang merupakan nilai yang diperoleh dengan membagi nilai koefisien dengan nilai kesalahan baku. Secara matematis t-statistics dapat dirumuskan sebagai berikut :

Terakhir adalah p-value yang dapat digunakan untuk memastikan bahwa koefisien signifikan atau tidak untuk menjelaskan variasi pada model.

Nilai koefisien dapat menggambarkan seberapa besar efek suatu variabel bebas dengan variabel tak bebas. Selain itu dapat menunjukkan arah dari hubungan tersebut. Jika koefisien bernilai positif maka variabel tak bebas akan naik jika nilai pada variabel bebas naik. Namun jika koefisien bernilai negatif maka variabel tak bebas akan turun jika nilai pada variabel bebas naik.

Nilai const atau konstan adalah nilai intercept pada model dimana jika nilai koefisien sama dengan nol, maka nilai variabel tak bebas akan sama dengan nilai konstan.

Untuk memastikan bahwa koefisien suatu variabel bebas memiliki pengaruh yang signifikan, kita dapat menggunakan p-value. Jika p-value memiliki nilai kurang dari level signifikansi tertentu, maka dapat dikatakan bahwa koefisien memiliki efek yang signifikan terhadap model. Dalam hasil summary di atas, diperoleh bahwa p-value sebesar 0.006.

Jika kita menggunakan angka signifikansi :

Maka p-value <a=0.05 sehingga koefisien yang diperoleh signifikan untuk model ini.

R-Squared

R-squared adalah salah satu ukuran yang digunakan untuk menilai seberapa baik variabel independen yang digunakan untuk menjelaskan variasi pada variabel dependen. Semakin besar nilainya atau semakin mendekati 1, semakin baik modelnya.

Secara matematis, R-squared dari model dapat dihitung menggunakan rumus berikut :

Penjelasan :

Pada hasil summary di atas diperoleh bahwa nilai

yang berarti persentase perubahan variabel tak bebas ‘Total’ yang dijelaskan oleh variabel bebas ‘Pendapatan’ sebesar 35.1%. Dan sekitar 64,9% sisanya dipengaruhi oleh faktor-faktor lainnya yang tidak termasuk di dalam model.

Uji Asumsi Klasik

Hal yang harus diperhatikan dalam regresi linier adalah apakah residual dari model berdistribusi normal atau tidak atau apakah terdapat homoskedastisitas atau tidak dan faktor-faktor lainnya.

Residual Harus Berdistribusi Normal

Agar model regresi valid, maka resiudal dari model harus berdistribusi normal. Hal ini dapat kita baca dari hasil summary dari model, yaitu skew. Semakin nilainya mendekati nol maka distribusi residual mendekati normal. Pada contoh sebelumnya kita memperoleh nilai skew sebesar 0.702 yang berarti distribusi dari residual cukup normal.

Homoskedastisitas

Selain distribusi dari residual harus mendekati atau berdistribusi normal, homoskedastisitas adalah salah satu syarat yang harus dipenuhi agar model yang dibuat valid. Homoskedastisitas adalah kondisi dimana variansi dari error seragam. Ketika yang terjadi justru variansinya semakin membasar atau mengecil maka yang terjadi adalah heteroskedastisitas. Hal ini dapat lebih mudah digambarkan sebagai berikut :

https://stats.stackexchange.com/

Kita dapat mengamati ini dari nilai Durbin-Watson. Jika nilai Durbin-Watson di antara nilai 1 dan 2 maka dapat dipastikan bahwa terdapat homoskedastisitas pada model.

Pada contoh sebelumnya kita memperoleh nilai Durbin-Watson sebesar 2.516 yang berarti tidak terdapat homoskedastisitas pada model sehingga model tidak valid untuk digunakan.

Penutup

Congratulation!

Kamu sudah berhasil menyelesaikan modul Statistic using Python for Data Science Part 2. Pada modul ini yang telah kamu pahami dan praktikkan materinya adalah :

  • Mengenal beragam bentuk diagram, histogram, dll pada bagian Data Visualisasi Part 1.
  • Mampu melakukan transformasi data.
  • Dapat mengetahui matrix korelasi.
  • Memahami regresi linier menggunakan statsmodel.

Referensi : DQLab Academy