Projek Machine Learning ini dibuat untuk memenuhi program pembelajaran di program Full Stack Data Analytic di Lembaga Algoritma(https://algorit.ma/). Machine Learning yang akan dibangun adalah machine learning untuk melakukan prediksi kekuatan beton berdasarkan komposisi komponen penyusun beton(semen, air, fly ash, dll) tanpa harus menunggu waktu lama agar dapat mengukur kekuatan beton. Sumber case ini adalah dari penilitian Prof. I-Cheng Yeh, Department of Information Management Chung-Hua University, Hsin Chu, Taiwan in 2007.

Library yang akan digunakan adalah sbb :

Tahapan pembuatan machine learning adalah sbb:

1.Proses Import Data

Pada studi kasus ini, disediakan 2 file data yaitu data-train.csv dan data-test.csv, dimana :
- data-train.csv digunakan untuk membangun & mengevaluasi pemodelan
- data-test.csv digunakan untuk melakukan prediksi

2. Data Preprocess and Exploratory Data Analysis (EDA)

2.1 Data Preprocessing

Tentukan langkah-langkah yang akan dilakukan dalam Data Preprocessing: 1. Periksa struktur data & Ubahlah tipe data yang belum sesuai 2. Periksa apakah terdapat missing value pada dataset dan lakukan remove duplicate jika dibutuhkan 3. Periksa apakah ada data outliner yang berdampak signifikan terhadap distribusi data 4. Sebelum melakukan analisis regresi, periksalah korelasi antara variabel target dan prediktor

2.1.1 Struktur data

struktur data sudah sesuai, sehingga tidak butuh dilakukan perubahan tipe data

#> Rows: 825
#> Columns: 10
#> $ id          <chr> "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "...
#> $ cement      <dbl> 540.0, 540.0, 332.5, 332.5, 198.6, 380.0, 380.0, 475.0,...
#> $ slag        <dbl> 0.0, 0.0, 142.5, 142.5, 132.4, 95.0, 95.0, 0.0, 132.4, ...
#> $ flyash      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
#> $ water       <dbl> 162, 162, 228, 228, 192, 228, 228, 228, 192, 192, 228, ...
#> $ super_plast <dbl> 2.5, 2.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
#> $ coarse_agg  <dbl> 1040.0, 1055.0, 932.0, 932.0, 978.4, 932.0, 932.0, 932....
#> $ fine_agg    <dbl> 676.0, 676.0, 594.0, 594.0, 825.5, 594.0, 594.0, 594.0,...
#> $ age         <int> 28, 28, 270, 365, 360, 365, 28, 28, 90, 28, 28, 90, 90,...
#> $ strength    <dbl> 79.99, 61.89, 40.27, 41.05, 44.30, 43.70, 36.45, 39.29,...
#> Rows: 205
#> Columns: 10
#> $ id          <chr> "S826", "S827", "S828", "S829", "S830", "S831", "S832",...
#> $ cement      <dbl> 266.0, 266.0, 427.5, 190.0, 380.0, 427.5, 198.6, 332.5,...
#> $ slag        <dbl> 114.0, 114.0, 47.5, 190.0, 0.0, 47.5, 132.4, 142.5, 237...
#> $ flyash      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
#> $ water       <dbl> 228.0, 228.0, 228.0, 228.0, 228.0, 228.0, 192.0, 228.0,...
#> $ super_plast <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
#> $ coarse_agg  <dbl> 932.0, 932.0, 932.0, 932.0, 932.0, 932.0, 978.4, 932.0,...
#> $ fine_agg    <dbl> 670.0, 670.0, 594.0, 670.0, 670.0, 594.0, 825.5, 594.0,...
#> $ age         <int> 90, 28, 270, 90, 270, 28, 180, 90, 180, 365, 365, 180, ...
#> $ strength    <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...

berikut contoh data pada dataset. Data terdiri dari 10 kolom dimana data yang akan diprediksi adalah kolom strength.

Dimensi dataset dapat dilihat dengan menggunakan function dim(). data_train terdiri dari 825 row dan 10 kolom. data test terdiri dari 205 row dan 10 kolom.

#> [1] 825  10
#> [1] 205  10

2.1.2 Cek Missing Value (N/A atau Null)

Untuk cek status data N/A menggunakan function is.na(). Kolom strength pada data test masih N/A karena kolom tersebut yang akan kita prediksi dengan menggunakan machine learning. Pada kedua dataset tidak terdapat missing value, sehingga tidak perlu ada drop/fill NA.

#>          id      cement        slag      flyash       water super_plast 
#>           0           0           0           0           0           0 
#>  coarse_agg    fine_agg         age    strength 
#>           0           0           0           0
#>          id      cement        slag      flyash       water super_plast 
#>           0           0           0           0           0           0 
#>  coarse_agg    fine_agg         age    strength 
#>           0           0           0         205

2.1.3.Cek Data Outlier

Kita akan melihat lebih detil statistik data set yang kita miliki dengan menggunakan function summary().

#>       id                cement           slag            flyash      
#>  Length:825         Min.   :102.0   Min.   :  0.00   Min.   :  0.00  
#>  Class :character   1st Qu.:194.7   1st Qu.:  0.00   1st Qu.:  0.00  
#>  Mode  :character   Median :275.1   Median : 20.00   Median :  0.00  
#>                     Mean   :280.9   Mean   : 73.18   Mean   : 54.03  
#>                     3rd Qu.:350.0   3rd Qu.:141.30   3rd Qu.:118.20  
#>                     Max.   :540.0   Max.   :359.40   Max.   :200.10  
#>      water        super_plast       coarse_agg        fine_agg    
#>  Min.   :121.8   Min.   : 0.000   Min.   : 801.0   Min.   :594.0  
#>  1st Qu.:164.9   1st Qu.: 0.000   1st Qu.: 932.0   1st Qu.:734.0  
#>  Median :184.0   Median : 6.500   Median : 968.0   Median :780.1  
#>  Mean   :181.1   Mean   : 6.266   Mean   : 972.8   Mean   :775.6  
#>  3rd Qu.:192.0   3rd Qu.:10.100   3rd Qu.:1028.4   3rd Qu.:826.8  
#>  Max.   :247.0   Max.   :32.200   Max.   :1145.0   Max.   :992.6  
#>       age            strength    
#>  Min.   :  1.00   Min.   : 2.33  
#>  1st Qu.:  7.00   1st Qu.:23.64  
#>  Median : 28.00   Median :34.57  
#>  Mean   : 45.14   Mean   :35.79  
#>  3rd Qu.: 56.00   3rd Qu.:45.94  
#>  Max.   :365.00   Max.   :82.60

Dari data summary tersebut, dapat disimpulkan terdapat outlier di kolom/parameter slag,flyash, dan age. Karena terdapat perbedaan signifikan pada data Median & Mean. Hal ini menginterpretasikan bahwa terdapat data yang anomali. Untuk lebih jelas akan digambarkan dalam bentuk diagram boxplot.

Berikut adalah list data outlier pada masing-masing kolom:

#> slag : 359.4 359.4
#> 
#> water : 121.8 121.8 121.8 121.8 121.8 237 247 246.9 236.7
#> 
#> super_plast: 32.2 28.2 28.2 32.2 28.2 32.2 28.2
#> 
#> fine_agg 594 594 594 594 594 594 594 594 594 594 594 594 594 594 594 594 594 594 594 594 594 594 992.6 992.6 992.6 992.6 992.6
#> 
#> age: 270 365 360 365 365 180 180 180 365 270 180 365 365 270 365 270 180 180 180 270 270 270 180 270 360 180 180 180 360 180 365 180 365 180 270 180 180 360 180 360 180 180 180 180 360 270
#> 
#> strength: 79.99 80.2 79.4 82.6 81.75

Sebaran data masing-masing variable dapat dilihat pada histogram di bawah ini. Tidak seluruh parameter/predictor terdistribusi normal. Untuk itu berpotensi dibutuhkan proses scale dengan quare root atau log transformation.

2.1.4 . Cek Korelasi Data

Untuk melakukan pengecekan korelasi masing-masing predictor dapat menggunakan graph di bawah ini. Dimana korelasi data tertinggi terdahap strength adalah cement(korelasi positif), super_plast(korelasi positif), water(korelasi negatif), dan age (korelasi positif).

atau grafik korelasi di bawah ini :

3. Model Fitting and Evaluation

3.1 Model I - Model Regresi Linear Tanpa Penanganan Outlier

Model I- Membangun model

#> Start:  AIC=3087.32
#> strength ~ cement + slag + flyash + water + super_plast + coarse_agg + 
#>     fine_agg + age
#> 
#>               Df Sum of Sq    RSS    AIC
#> - fine_agg     1       179  69238 3087.0
#> <none>                      69059 3087.3
#> - coarse_agg   1       356  69415 3088.7
#> - water        1       867  69926 3093.5
#> - super_plast  1      1016  70076 3095.0
#> - flyash       1      3183  72242 3115.1
#> - slag         1      6531  75590 3145.0
#> - cement       1     13024  82084 3199.3
#> - age          1     35060 104120 3356.3
#> 
#> Step:  AIC=3087.02
#> strength ~ cement + slag + flyash + water + super_plast + coarse_agg + 
#>     age
#> 
#>               Df Sum of Sq    RSS    AIC
#> - coarse_agg   1       192  69430 3086.9
#> <none>                      69238 3087.0
#> - super_plast  1       936  70174 3093.9
#> - water        1      4226  73464 3124.1
#> - flyash       1      5594  74832 3136.3
#> - slag         1     17362  86600 3232.7
#> - age          1     34956 104194 3354.8
#> - cement       1     40444 109682 3388.6
#> 
#> Step:  AIC=3086.86
#> strength ~ cement + slag + flyash + water + super_plast + age
#> 
#>               Df Sum of Sq    RSS    AIC
#> <none>                      69430 3086.9
#> - super_plast  1       747  70177 3091.9
#> - flyash       1      5436  74866 3134.6
#> - water        1      6410  75841 3143.1
#> - slag         1     17691  87121 3234.7
#> - age          1     35265 104695 3355.9
#> - cement       1     41308 110738 3393.0
#> 
#> Call:
#> lm(formula = strength ~ cement + slag + flyash + water + super_plast + 
#>     age, data = data.frame(data_train1))
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -30.873  -6.698   0.893   7.173  36.176 
#> 
#> Coefficients:
#>              Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) 26.838713   5.271079   5.092 4.65e-07 ***
#> cement       0.101857   0.005168  19.710  < 2e-16 ***
#> slag         0.079303   0.006148  12.899  < 2e-16 ***
#> flyash       0.066859   0.009351   7.150 2.33e-12 ***
#> water       -0.203523   0.026212  -7.765 3.18e-14 ***
#> super_plast  0.271058   0.102280   2.650  0.00824 ** 
#> age          0.132038   0.007250  18.212  < 2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 10.31 on 653 degrees of freedom
#> Multiple R-squared:  0.6182, Adjusted R-squared:  0.6147 
#> F-statistic: 176.2 on 6 and 653 DF,  p-value: < 2.2e-16

Model I - Evaluasi model

Pada tahap ini dilakukan Fit 20% data untuk proses validasi model dibuat. Dan diperoleh : R Square model_orginal : 61.47%, namun ketikan di fit data untuk valdiasi, R Square menjadi 58.59% dimana tingkat error data validasi lebih tinggi dibanding data train.

#> [1] 8.502923
#> [1] 0.5859154
#> [1] "multicollinearity:"
#>      cement        slag      flyash       water super_plast         age 
#>    1.864874    1.722825    2.251775    1.860621    2.332434    1.065414
#> [1] "heteroscedasticity:"
#> 
#>  studentized Breusch-Pagan test
#> 
#> data:  model_original
#> BP = 99.71, df = 6, p-value < 2.2e-16
#> [1] " normality test:"
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  model_original$residuals
#> W = 0.99461, p-value = 0.01984

3.2 Model II - Dengan hanlde outlier (scale square root) dengan remove outlier target

Model II- Membangun model

Adjusted R-squared : 63.07%. Lebih baik dibanding model I, namun tidak signifikan.

#> 
#> Call:
#> lm(formula = strength ~ ., data = data.frame(data_train2))
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -1.81741 -0.38551  0.03816  0.41970  1.99698 
#> 
#> Coefficients:
#>              Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) -0.003372   0.023923  -0.141   0.8879    
#> cement       0.786236   0.063934  12.298  < 2e-16 ***
#> slag         0.529600   0.062454   8.480  < 2e-16 ***
#> flyash       0.362403   0.058885   6.154 1.32e-09 ***
#> water       -0.151167   0.060755  -2.488   0.0131 *  
#> super_plast  0.107540   0.039818   2.701   0.0071 ** 
#> coarse_agg   0.114383   0.051884   2.205   0.0278 *  
#> fine_agg     0.120138   0.062475   1.923   0.0549 .  
#> age          0.493483   0.026434  18.669  < 2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.6114 on 647 degrees of freedom
#> Multiple R-squared:  0.6352, Adjusted R-squared:  0.6307 
#> F-statistic: 140.8 on 8 and 647 DF,  p-value: < 2.2e-16
#> 
#> Call:
#> lm(formula = strength ~ cement + slag + flyash + water + super_plast + 
#>     coarse_agg + fine_agg + age, data = data.frame(data_train2))
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -1.81741 -0.38551  0.03816  0.41970  1.99698 
#> 
#> Coefficients:
#>              Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) -0.003372   0.023923  -0.141   0.8879    
#> cement       0.786236   0.063934  12.298  < 2e-16 ***
#> slag         0.529600   0.062454   8.480  < 2e-16 ***
#> flyash       0.362403   0.058885   6.154 1.32e-09 ***
#> water       -0.151167   0.060755  -2.488   0.0131 *  
#> super_plast  0.107540   0.039818   2.701   0.0071 ** 
#> coarse_agg   0.114383   0.051884   2.205   0.0278 *  
#> fine_agg     0.120138   0.062475   1.923   0.0549 .  
#> age          0.493483   0.026434  18.669  < 2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.6114 on 647 degrees of freedom
#> Multiple R-squared:  0.6352, Adjusted R-squared:  0.6307 
#> F-statistic: 140.8 on 8 and 647 DF,  p-value: < 2.2e-16

Model II - Evaluasi model scale

Adjusted R-squared : 63.07% pada data train, namun pada data test sebesar 64%. Shingga dapat disimpulkan lebih baik dibanding model I dan tidak over fitting, namun tidak signifikan bertambah akurasi prediksinya.

#> [1] "MAE: 0.541466212542492"
#> [1] "Adj. R Square: 0.630655551229489"
#> [1] "multicollinearity:"
#>      cement        slag      flyash       water super_plast  coarse_agg 
#>    7.323742    6.838624    6.229559    6.141061    2.859650    4.789047 
#>    fine_agg         age 
#>    6.459908    1.104924
#> [1] "heteroscedasticity:"
#> 
#>  studentized Breusch-Pagan test
#> 
#> data:  model_scale
#> BP = 90.358, df = 8, p-value = 3.933e-16
#> [1] " normality test:"
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  model_scale$residuals
#> W = 0.99565, p-value = 0.06401

3.3.Model III - Dengan hanlde outlier using log transformation

Log transformation butuh dilakukan untuk menormalisasi data dan smoothing agar jarak antar data pada predictor tidak terlalu jauh.

#>      cement           slag            flyash           water      
#>  Min.   :4.625   Min.   :  0.00   Min.   :  0.00   Min.   :4.802  
#>  1st Qu.:5.271   1st Qu.:  0.00   1st Qu.:  0.00   1st Qu.:5.105  
#>  Median :5.617   Median : 20.00   Median :  0.00   Median :5.215  
#>  Mean   :5.568   Mean   : 73.18   Mean   : 54.03   Mean   :5.192  
#>  3rd Qu.:5.858   3rd Qu.:141.30   3rd Qu.:118.20   3rd Qu.:5.257  
#>  Max.   :6.292   Max.   :359.40   Max.   :200.10   Max.   :5.509  
#>   super_plast       coarse_agg       fine_agg          age       
#>  Min.   : 0.000   Min.   :6.686   Min.   :6.387   Min.   :0.000  
#>  1st Qu.: 0.000   1st Qu.:6.837   1st Qu.:6.599   1st Qu.:1.946  
#>  Median : 6.500   Median :6.875   Median :6.659   Median :3.332  
#>  Mean   : 6.266   Mean   :6.877   Mean   :6.648   Mean   :3.150  
#>  3rd Qu.:10.100   3rd Qu.:6.936   3rd Qu.:6.718   3rd Qu.:4.025  
#>  Max.   :32.200   Max.   :7.043   Max.   :6.900   Max.   :5.900  
#>     strength     
#>  Min.   :0.8459  
#>  1st Qu.:3.1629  
#>  Median :3.5430  
#>  Mean   :3.4464  
#>  3rd Qu.:3.8273  
#>  Max.   :4.4140

Model III- Membangun model

#> 
#> Call:
#> lm(formula = strength ~ ., data = data.frame(data_train3))
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.98741 -0.13327  0.00184  0.16320  0.66002 
#> 
#> Coefficients:
#>               Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) -9.4215540  3.5460264  -2.657 0.008079 ** 
#> cement       1.1622369  0.0567332  20.486  < 2e-16 ***
#> slag         0.0033695  0.0002466  13.666  < 2e-16 ***
#> flyash       0.0032690  0.0003084  10.601  < 2e-16 ***
#> water       -0.6185971  0.1720572  -3.595 0.000349 ***
#> super_plast  0.0041230  0.0026623   1.549 0.121949    
#> coarse_agg   0.6860384  0.2115898   3.242 0.001246 ** 
#> fine_agg     0.5210269  0.1882061   2.768 0.005794 ** 
#> age          0.3111670  0.0079660  39.062  < 2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.2408 on 651 degrees of freedom
#> Multiple R-squared:  0.8174, Adjusted R-squared:  0.8152 
#> F-statistic: 364.3 on 8 and 651 DF,  p-value: < 2.2e-16
#> Start:  AIC=-1870.22
#> strength ~ cement + slag + flyash + water + super_plast + coarse_agg + 
#>     fine_agg + age
#> 
#>               Df Sum of Sq     RSS     AIC
#> <none>                      37.762 -1870.2
#> - super_plast  1     0.139  37.901 -1869.8
#> - fine_agg     1     0.445  38.206 -1864.5
#> - coarse_agg   1     0.610  38.372 -1861.7
#> - water        1     0.750  38.512 -1859.2
#> - flyash       1     6.519  44.281 -1767.1
#> - slag         1    10.834  48.596 -1705.7
#> - cement       1    24.344  62.106 -1543.8
#> - age          1    88.507 126.269 -1075.5
#> 
#> Call:
#> lm(formula = strength ~ cement + slag + flyash + water + super_plast + 
#>     coarse_agg + fine_agg + age, data = data.frame(data_train3))
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.98741 -0.13327  0.00184  0.16320  0.66002 
#> 
#> Coefficients:
#>               Estimate Std. Error t value Pr(>|t|)    
#> (Intercept) -9.4215540  3.5460264  -2.657 0.008079 ** 
#> cement       1.1622369  0.0567332  20.486  < 2e-16 ***
#> slag         0.0033695  0.0002466  13.666  < 2e-16 ***
#> flyash       0.0032690  0.0003084  10.601  < 2e-16 ***
#> water       -0.6185971  0.1720572  -3.595 0.000349 ***
#> super_plast  0.0041230  0.0026623   1.549 0.121949    
#> coarse_agg   0.6860384  0.2115898   3.242 0.001246 ** 
#> fine_agg     0.5210269  0.1882061   2.768 0.005794 ** 
#> age          0.3111670  0.0079660  39.062  < 2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.2408 on 651 degrees of freedom
#> Multiple R-squared:  0.8174, Adjusted R-squared:  0.8152 
#> F-statistic: 364.3 on 8 and 651 DF,  p-value: < 2.2e-16

Model III - Evaluasi model

Adj. R Square meningkat menjadi: 81.77% (lebih baik dibanding model I & II)

#> [1] "MAE: 0.174721344232881"
#> [1] "Adj. R Square: 0.815170506057593"
#> [1] "multicollinearity:"
#>      cement        slag      flyash       water super_plast  coarse_agg 
#>    5.505455    5.078702    4.489100    4.699301    2.896739    3.357009 
#>    fine_agg         age 
#>    4.475771    1.028341
#> [1] "heteroscedasticity:"
#> 
#>  studentized Breusch-Pagan test
#> 
#> data:  model_log
#> BP = 66.079, df = 8, p-value = 2.952e-11
#> [1] " normality test:"
#> 
#>  Shapiro-Wilk normality test
#> 
#> data:  model_log$residuals
#> W = 0.98871, p-value = 5.743e-05

3.4 Model IV - Random Forest dengan remove outlier di target

#> [1] 820   9

Model IV- cross-validation data

Pada model random forest, corss validation pada prinsipnya sudah dilakukan otomatis saat menjalankan model. Sehingga tidak dibutuhkan pemisahaan data train dan data test.

Model IV- Membangun model

nilai optimun randowm forest terjadi saat mtry = 5 dengan RMSE 5.04 dan MAE 3.6. Model ini memenuhi kriteria yang disyaratkan dengan R Square > 90% dan MAE <4%. Sehingga model ini adalah model yang paling baik dari 4 model yang dipakai untuk prediksi.

Model IV - Evaluasi mode

#> Random Forest 
#> 
#> 820 samples
#>   8 predictor
#> 
#> No pre-processing
#> Resampling: Cross-Validated (6 fold, repeated 3 times) 
#> Summary of sample sizes: 684, 683, 684, 683, 683, 683, ... 
#> Resampling results across tuning parameters:
#> 
#>   mtry  RMSE      Rsquared   MAE     
#>   2     5.670121  0.9001213  4.272428
#>   5     5.040950  0.9091862  3.651791
#>   8     5.072445  0.9063404  3.641625
#> 
#> RMSE was used to select the optimal model using the smallest value.
#> The final value used for the model was mtry = 5.
#> 
#> Call:
#>  randomForest(x = x, y = y, mtry = param$mtry) 
#>                Type of random forest: regression
#>                      Number of trees: 500
#> No. of variables tried at each split: 5
#> 
#>           Mean of squared residuals: 23.79246
#>                     % Var explained: 91.13
#> rf variable importance
#> 
#>              Overall
#> age         100.0000
#> cement       81.7304
#> water        28.2220
#> super_plast  12.7195
#> slag          7.3321
#> fine_agg      5.9187
#> coarse_agg    0.9443
#> flyash        0.0000

4.Prediction Performance

Pediction Performance dari concrete test memenuhi target yang ditetapkan sbb : * MAE : 3,57 dan * R-squared : 91 %

5. Interpretation

5.1 LIME methode untuk interpretasi

LIME dapat digunakan untuk menginterpretasikan model yang komplex agar lebih mudah di pahami/diinterpretasikan dengan local variable. Hal ini lebih membantu dibandingkan dengan random forest yang komplex dimana cenderung bersifat black box dan hanya menampilkan summary dari hasil pemodelan.

5.2 Random Forest Model

pada model random forest kita dapat melihat interpretasi model dengan menggunakan varImp untuk melihat variable Importance pada sebuah model random forest. Dimana pada model IV terdapat 5 variable penting penentu atau yang signifikan digunakan untuk membangun model.

#> Random Forest 
#> 
#> 820 samples
#>   8 predictor
#> 
#> No pre-processing
#> Resampling: Cross-Validated (6 fold, repeated 3 times) 
#> Summary of sample sizes: 684, 683, 684, 683, 683, 683, ... 
#> Resampling results across tuning parameters:
#> 
#>   mtry  RMSE      Rsquared   MAE     
#>   2     5.670121  0.9001213  4.272428
#>   5     5.040950  0.9091862  3.651791
#>   8     5.072445  0.9063404  3.641625
#> 
#> RMSE was used to select the optimal model using the smallest value.
#> The final value used for the model was mtry = 5.
#> rf variable importance
#> 
#>              Overall
#> age         100.0000
#> cement       81.7304
#> water        28.2220
#> super_plast  12.7195
#> slag          7.3321
#> fine_agg      5.9187
#> coarse_agg    0.9443
#> flyash        0.0000

6. Conclussion

Berdasarkan 4 model yang dibangun, diperoleh informasi bahwa : a. Tujuan tercapat dengan prediksi menggunakan model IV, diperoleh nilai MAE 3.57 (kurang dari 4) dan R Square sebesar 91% (lebih dari 90%).

  1. Sehingga dapat disimpulkan permasalahan perhitungan kekuatan beton tanpa harus menunggu cukup lama untuk proses pengukuran tercapai. Dimana Machine learning dapat digunakan untuk memprediksi dengan tingkat error yang ditetapkan.

  2. Model yang digunakan adalah model IV dengan menggunakan random forest dengan melakukan pedekatan penghapusan 5row data outlier yang cukup signifikan mempengaruhi pemodelan.

  3. Peluang lain yang dapat dilakukan adalah, pengusaha atau perusahaan infrastruktur dapat memanfaatkan machine learning ini untuk memprediksi kekuatan beton yang diharapkan dari komposisi bahan-bahan penyusunnya. Atau sebaliknya, pemodelan machine learning juga dapat digunakan untuk menemukan komposisi bahan bangunan paling hemat/efisien untuk menghasilkan kekuatan beton yang sama. Seingga dapat memberikan rekomendasi bagi perusahaan konstruksi agar memperoleh laba lebih tinggi dengan qualitas yang sama.