{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Data Mining\n", "\n", "## Tugas 3: Regresi Linear\n", "\n", "### Mekanisme\n", "\n", "Anda hanya diwajibkan untuk mengumpulkan file ini saja ke uploader yang disediakan di http://elearning2.uai.ac.id/. Ganti nama file ini saat pengumpulan menjadi **tugas3_NIM.ipynb**.\n", "\n", "**Keterlambatan**: Pengumpulan tugas yang melebihi tenggat yang telah ditentukan tidak akan diterima. Keterlambatan akan berakibat pada nilai nol untuk tugas ini.\n", "\n", "**Kolaborasi**: Anda diperbolehkan untuk berdiskusi dengan teman Anda, tetapi *dilarang keras* menyalin kode maupun tulisan dari teman Anda.\n", "\n", "### Petunjuk\n", "\n", "Terdapat beberapa *packages* yang Anda akan gunakan dalam mengerjakan tugas ini, yaitu:\n", "\n", "- matplotlib\n", "- numpy\n", "- pandas\n", "- scipy\n", "- seaborn\n", "- scikit-learn\n", "\n", "Anda diperbolehkan (jika dirasa perlu) untuk mengimpor modul tambahan untuk tugas ini, kecuali dijelaskan sebaliknya. Namun, seharusnya modul yang tersedia sudah cukup untuk memenuhi kebutuhan Anda.\n", "\n", "Pastikan jawaban Anda singkat, padat, dan jelas. Mayoritas pertanyaan yang diberikan dapat dijawab dalam 3-4 kalimat saja." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**NIM: **\n", "\n", "**Nilai akhir: XX/60**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from scipy.stats import norm\n", "from sklearn.linear_model import LinearRegression, Ridge\n", "from sklearn.model_selection import train_test_split, cross_val_score\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.pipeline import make_pipeline\n", "from sklearn.preprocessing import PolynomialFeatures\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import warnings\n", "%matplotlib inline\n", "\n", "plt.style.use('bmh')\n", "warnings.filterwarnings('ignore')\n", "\n", "RANDOM_STATE = 1337" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df = pd.read_csv('../dataset/diabetes.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Deskripsi Dataset\n", "\n", "Diabetes dataset\n", "================\n", "\n", "Notes\n", "-----\n", "\n", "Ten baseline variables, age, sex, body mass index, average blood\n", "pressure, and six blood serum measurements were obtained for each of n =\n", "442 diabetes patients, as well as the response of interest, a\n", "quantitative measure of disease progression one year after baseline.\n", "\n", "Data Set Characteristics:\n", "- Number of Instances: 442\n", "- Number of Attributes: First 10 columns are numeric predictive values\n", "- Target: Column 11 is a quantitative measure of disease progression one year after baseline\n", "- Attributes:\n", " - :Age:\n", " - :Sex:\n", " - :Body mass index:\n", " - :Average blood pressure:\n", " - :S1:\n", " - :S2:\n", " - :S3:\n", " - :S4:\n", " - :S5:\n", " - :S6:\n", "\n", "Source URL:\n", "http://www4.stat.ncsu.edu/~boos/var.select/diabetes.html\n", "\n", "For more information see:\n", "Bradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani (2004) \"Least Angle Regression,\" Annals of Statistics (with discussion), 407-499.\n", "(http://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Eksplorasi Awal Data (20 poin)\n", "\n", "Sebelum menerapkan model regresi, Anda diminta untuk mengeksplorasi atribut dan label yang akan digunakan dalam tugas ini." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 1.1 (6 poin)\n", "\n", "Gambarkan histogram untuk `age`, `bmi`, dan `bp`. Gambarkan juga kurva distribusi Gaussian yang dicocokkan dengan tiap atribut tersebut." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 1.2 (2 poin)\n", "\n", "Gambarkan bar plot untuk `sex`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 1.3.a (2 poin)\n", "\n", "Karena kita mungkin akan kesulitan memahami atribut `s1`-`s6`, coba gambarkan dalam bentuk joint plot." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 1.3.b (3 poin)\n", "\n", "Gambarkan juga *correlation heatmap* dari keenam nilai serum tersebut. Apakah ada pola menarik yang Anda temukan?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Jawaban Anda di sini*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 1.4 (3 poin)\n", "\n", "Gambarkan *correlation heatmap* untuk semua atribut dan label dari data yang diberikan. Apa yang dapat Anda amati?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Jawaban Anda di sini*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 1.4.b (2 poin)\n", "\n", "Anda mungkin melihat bahwa salah satu atribut yang berkorelasi cukup kuat dengan label yang digunakan adalah `bmi`. Coba gambarkan *scatter plot* dengan menggunakan `bmi` sebagai sumbu horizontal dan `y` sebagai sumbu vertikal." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 1.5 (2 poin)\n", "\n", "Gambarkan histogram dari label yang Anda gunakan agar dapat lebih memahami kasus yang Anda akan tangani. Laporkan juga *summary statistics*-nya." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 1.6 (2 poin)\n", "\n", "Bagi dataset Anda menjadi 70% data latih dan 30% data uji dengan menggunakan `train_test_split()`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Regresi Linear (40 poin)\n", "\n", "Anda diminta untuk melakukan regresi pada dataset yang telah diberikan. Tentu akan sangat baik jika Anda bisa memahami label yang akan diprediksi. Namun, dalam tugas ini, Anda tidak perlu berfokus pada interpretasi dari label dan prediksinya. Anda hanya diminta untuk menjelaskan hasil eksplorasi Anda dengan *benchmark* yang ditetapkan di awal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.1.a (3 poin)\n", "\n", "Lakukan 5-fold cross validation pada data latih dengan menggunakan algoritma `LinearRegression` dengan fitur `bmi` saja. Laporkan nilai rata-rata *root-mean-square error* (RMSE) dari 5-fold CV tersebut." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.1.b (2 poin)\n", "\n", "Lakukan hal yang sama seperti pada soal 2.1.a, tapi kali ini dengan semua fitur yang ada. Laporkan kembali RMSE-nya." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.2.a (6 poin)\n", "\n", "Apakah kita bisa menghasilkan model yang lebih baik? Sekarang coba lakukan regresi dengan fungsi basis polinomial. Gunakan nilai polinomial $p \\in [1,5]$. Gambarkan RMSE dari 5-fold CV dengan berbagai nilai transformasi polinomial tersebut dalam bentuk *line plot*." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.2.b (1 poin)\n", "\n", "Berdasarkan grafik yang telah Anda buat pada soal 2.2.a, berapa nilai $p$ yang terbaik?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Jawaban Anda di sini*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.2.c (3 poin)\n", "\n", "Dari model yang terbaik tersebut, gambarkan nilai koefisien untuk masing-masing atribut dalam bentuk *bar plot*." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.3.a (2 poin)\n", "\n", "Lakukan hal yang sama seperti pada soal 2.2.a, tapi ganti algoritma regresi yang digunakan dengan `Ridge`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.3.b (3 poin)\n", "\n", "Berdasarkan hasil yang Anda dapatkan, perbedaan apa yang dapat Anda amati? Menurut Anda, mengapa hasilnya bisa seperti itu?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Jawaban Anda di sini*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.4.a (2 poin)\n", "\n", "Apa fungsi regularisasi seperti pada *ridge* dan *lasso regression*?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Jawaban Anda di sini*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.4.b (2 poin)\n", "\n", "*Loss function* dengan regularisasi $L_2$ didefinisikan sebagai\n", "$$\n", "O(\\mathbf{w}) = \\sum_{i=1}^{n} (y_i - \\mathbf{w}^T \\mathbf{x}_i)^2 - \\alpha \\|\\mathbf{w}\\|_2^2\n", "$$\n", "Apa yang terjadi saat $\\alpha \\rightarrow 0$ dan $\\alpha \\rightarrow \\infty$?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Jawaban Anda di sini*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.5.a (4 poin)\n", "\n", "Dari model terbaik yang Anda dapatkan tersebut, lakukan prediksi pada data uji, lalu laporkan RMSE-nya." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.5.b (4 poin)\n", "\n", "Gambarkan *residual plot* dari prediksi yang dilakukan pada data uji dengan sumbu horizontal adalah $\\hat{y}$ dan sumbu vertikal adalah residualnya. Jangan lupa untuk memberikan label pada tiap sumbu. Apa yang dapat Anda amati?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Jawaban Anda di sini*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.6 (2 poin)\n", "\n", "Pada dasarnya, kita dapat menggunakan optimasi analitis untuk mendapatkan solusi tertutup dari regresi linear. Sebagai alternatif, apakah kita dapat menggunakan optimasi numerik seperti *gradient descent*? Jika ya, apakah hasil optimasinya akan sama? Berikan alasannya. Jika tidak, apa yang menyebabkan hasilnya tidak akan sama?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Jawaban Anda di sini*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.7 (2 poin)\n", "\n", "Dalam eksplorasi ini, Anda diminta menggunakan RMSE sebagai *evaluation metrics*. Kapan Anda dapat menggunakan *metrics* alternatif seperti *mean absolute error* (MAE)? Apa keuntungannya?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Jawaban Anda di sini*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Soal 2.8 (4 poin)\n", "\n", "Berikan kesimpulan Anda dari eksplorasi yang telah dilakukan." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Jawaban Anda di sini*" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.2" } }, "nbformat": 4, "nbformat_minor": 2 }