Tampilkan postingan dengan label Machine Learning. Tampilkan semua postingan
Tampilkan postingan dengan label Machine Learning. Tampilkan semua postingan

Kamis, 17 Oktober 2019

Gadged dan Machine Learning


Melanjutkan R gadget sebelumnya, kali ini akan diberikan contoh Analisa Modeling menggunakan R programming yang mudah dibaca lewat smartphone, analisa menggunakan data  'Housing Values in Suburbs of Boston' menentukan variable yang paling berpengaruh(Variable Important) terhadap nilai perumahan.

Sebuah contoh penggunaan Machine Learning dengan R programming yang mudah dipelajari dan mudah di aplikasi. 




Seperti biasa file terdiri dari file ui dan file server, scriptnya sbb:

ui.R
 ui <-
    miniPage(
    gadgetTitleBar("Boston Analytic, simple way finding Variable Importance"),
  miniTabstripPanel(
    miniTabPanel("Data", icon = icon("table"),
      miniContentPanel(     
       dataTableOutput("data"))),
    #---keterangan
    miniTabPanel("About Boston Data", icon = icon("list-alt"),
      miniContentPanel(     
       dataTableOutput("About"),
         h3(strong('Housing Values in Suburbs of Boston')),
               # p('Housing Values in Suburbs of Boston',align = 'Justify'),
p('Description : The Boston data frame has 506 rows and 14 columns.',align = 'Justify'),
p('Usage : Boston',align = 'Justify'),
p('Format : This data frame contains the following columns:',align = 'Justify'),
p('1. crim : per capita crime rate by town.',align = 'Justify'),
p('2. zn : proportion of residential land zoned for lots over 25,000 sq.ft.',align = 'Justify'),
p('3. indus : proportion of non-retail business acres per town.',align = 'Justify'),
p('4. chas : Charles River dummy variable (= 1 if tract bounds river; 0 otherwise).',align = 'Justify'),
p('5. nox : nitrogen oxides concentration (parts per 10 million).',align = 'Justify'),
p('6. rm : average number of rooms per dwelling.',align = 'Justify'),
p('7. age : proportion of owner-occupied units built prior to 1940.',align = 'Justify'),
p('8. dis : weighted mean of distances to five Boston employment centres.',align = 'Justify'),
p('9. rad : index of accessibility to radial highways.',align = 'Justify'),
p('10. tax : full-value property-tax rate per 10,000 dollar.',align = 'Justify'),
p('11. ptratio : pupil-teacher ratio by town.',align = 'Justify'),
p('12. black : 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town.',align = 'Justify'),
p('13. lstat : lower status of the population (percent).',align = 'Justify'),
p('14. medv : median value of owner-occupied homes per 1000s dollar.',align = 'Justify'))),

    #
     miniTabPanel("Plot Model",icon = icon("area-chart"),
    miniContentPanel(
       plotOutput("model"))),

    miniTabPanel("Variable Important",icon = icon("area-chart"),
       miniContentPanel(     
        verbatimTextOutput(("var_importance")))),
   
    miniTabPanel("Variable imp",icon = icon("table"),
       miniContentPanel(     
    plotOutput("pg")))
  ))


server.R

library(shiny)
library(miniUI)
library(ggplot2)
library(dplyr)
library(MASS)
library(randomForest)

data <- Boston
data
dt1 <- data[ ,-4]
dt1
spl <- sample(nrow(dt1),nrow(dt1)*0.7)
train <- dt1[spl, ]
test <- dt1[-spl, ]

model <- randomForest(medv~., data = train)

pmod <- plot(model)
pmod+theme_linedraw()
pmod

pm <- summary(model)
pm

pv <- varImpPlot(model)
pv

var_importance <- data_frame(variable = setdiff(colnames(train), "medv"),
                             importance = as.vector(importance(model)))
var_importance <- arrange(var_importance, desc(importance))
#var_importance
var_importance$variable <- factor(var_importance$variable, levels=var_importance$variable)
pg <- ggplot(data = var_importance, aes(x = variable, y = importance))+
  geom_bar(stat = "identity")+ggtitle("Varible Importance")+theme_linedraw()
pg

server <- function(input, output, session) {
   
  output$data <- renderDataTable({
    data
  })
     output$model <- renderPlot({
    plot(model)
  })
    output$var_importance<- renderPrint({
    var_importance
  })
   output$pg <- renderPlot({
    pg
  })
    observeEvent(input$done, {
    stopApp(TRUE)
  })
}

Selanjutnya tinggal di upload di server shiny, file dibuat untuk versi gadget.

Referensi:
Kursus R programming


Senin, 26 Agustus 2019

R programming dalam dunia kedokteran

R programming mempermudah dunia kedokteran




Dari yang paling sederhana seperti perhitungan BMI(Body Mass Index) sampai tindakan medis yang menggunakan lengan robot. Semua itu berangkat dari analisa dataset yang hanya terdiri dari beberapa variable sampai tidak terbatas jumlahnya. 
Contoh script BMI dengan R programming:

Kamis, 16 Mei 2019

Model H2O untuk analisa fraud

Melanjutkan postingan sebelumnya, di sini akan digunakan model H2O.

Apa yang membuat H2O lebih cepat?
H2O memiliki fitur yang bersih dan jelas untuk langsung menghubungkan tool baik R atau Python, dengan CPU yang ada di mesin anda. Dengan cara ini kita dapat menyalurkan lebih banyak memori, memproses dengan tool yang ada di R atau Python untuk membuat perhitungan lebih cepat.  Package H2O memungkinkan perhitungan berlangsung pada kapasitas CPU 100% . Di samping itu H2O juga dapat dihubungkan dengan cluster di platform cloud untuk melakukan perhitungan. H2O dapat mengkompresi data yang besar, juga melakukan proses secara paralel.
Fraud illustration


Split data
Data displit menjadi 3 bagian, 2 bagian train data dan 1 bagian test data.

splits <- h2o.splitFrame(creditcard_hf,
                         ratios = c(0.4, 0.4),
                         seed = 42)
train_unsupervised  <- splits[[1]]
train_supervised  <- splits[[2]]
test <- splits[[3]]
response <- "Class"
features <- setdiff(colnames(train_unsupervised), response)

Autoencoder
Pertama, menggunakan deep leatning autoencouder pada train_unsupervised  kita cukup mengatur autoencoder = TRUE.
Di sini, dipakai teknik "bottleneck", di mana lapisan tersembunyi di tengah sangat kecil. Ini berarti bahwa model harus dikurangi  dimensinay(dalam hal ini, hingga 2 node / dimensi).
Model autoencoder kemudian akan mempelajari pola input data terlepas dari label kelas yang diberikan. Akan dilihat transaksi credit card  mana yang serupa dan transaksi mana yang outlier atau anomali.

model_nn <- h2o.deeplearning(x = features,
                             training_frame = train_unsupervised,
                             model_id = "model_nn",
                             autoencoder = TRUE,
                             reproducible = TRUE, 
                             #slow - turn off for real problems
                             ignore_const_cols = FALSE,
                             seed = 42,
                             hidden = c(10, 2, 10),
                             epochs = 100,
                             activation = "Tanh")

Simpan model
h2o.saveModel(model_nn, path="model_nn", force = TRUE)
model_nn <- h2o.loadModel("model_nn")
model_nn
## Model Details:
## H2OAutoEncoderModel: deeplearning
## Model ID:  model_nn
## Status of Neuron Layers: auto-encoder, gaussian distribution, Quadratic loss, 776 weights/biases, 16.0 KB, 2,622,851 training samples, mini-batch size 1
##   layer units  type dropout       l1       l2 mean_rate rate_rms momentum
## 1     1    34 Input  0.00 %                                             
## 2     2    10  Tanh  0.00 % 0.000000 0.000000  0.709865 0.320108 0.000000
## 3     3     2  Tanh  0.00 % 0.000000 0.000000  0.048458 0.109033 0.000000
## 4     4    10  Tanh  0.00 % 0.000000 0.000000  0.164717 0.192053 0.000000
## 5     5    34  Tanh         0.000000 0.000000  0.369681 0.425672 0.000000
##   mean_weight weight_rms mean_bias bias_rms
## 1                                         
## 2   -0.039307   0.691302  0.008052 0.965178
## 3   -0.097383   0.314106  0.226376 0.067917
## 4    0.227664   1.089589  0.112032 0.672444
## 5    0.011072   0.605586  0.091124 0.722602
##
## H2OAutoEncoderMetrics: deeplearning
## ** Reported on training data. **
##
## Training Set Metrics:
## MSE: (Extract with `h2o.mse`) 0.001472071
## RMSE: (Extract with `h2o.rmse`) 0.03836757
#Convert to autoencoded representation

test_autoenc <- h2o.predict(model_nn, test)

Reduce hidden layers dimension
Karena saya telah menggunakan model bottleneck dengan dua node di lapisan tersembunyi di tengah, kita dapat menggunakan pengurangan dimensi ini untuk menjelajahi ruang fitur kami (mirip dengan apa yang bisa kami lakukan dengan analisis komponen utama). Kami dapat mengekstrak fitur tersembunyi ini dengan fungsi h2o.deepfeatures () dan memplotnya untuk menunjukkan representasi data input yang berkurang.


Selasa, 14 Mei 2019

Berapa persenkah creditcard yang kena fraud?


Apa yang dimaksud fraud  : Fraud is the crime of getting money by deceiving people.
Menyambung postingan  terdahulu, bahwa aplikasi Benford hanya cocok untuk uji data yang sifatnya time serries, bagaimana jika data yang akan kita analisa terdiri dari banyak variable prediktor dan data target yang tidak balance.

Fraud data preparation
Kita akan ambil bahan dari dataset  creditcard yang ada di Kaggle, terdiri 284315  observasi  dan dicurigai ada 17% nya  creditcard tsb kena fraud. Yang jadi masalah kita harus menentukan dari 17 % tersebut, berapa persenkah data yang benar-benar fraud atau hanya yang kelihatannya fraud saja.
Dimensi dataset
Dimensi dataset creditcard terdiri dari 284315 baris predictor,  dan  variable kolom 31, terdiri dari :
Variable Time dalah waktu dalam detik antara trasaksi pertama dan lainnya.
Variable  V1 - V28, yang merupakan hasil dari transformasi PCA original data(rahasia).
Variable  Amount adalah jumlah uang yang ditransfer.
Class berisi 1=fraud dan 0=bukan fraud

library(tidyverse)

# download from https://www.kaggle.com/dalpozz/creditcardfraud<- creditcard.csv="" div="" read.csv="">

table(creditcard$Class)
#          0      1
#284315    492
#492/284315=17%

creditcard %>%
  ggplot(aes(x = Class)) +
    geom_bar(color = "grey", fill = "lightgrey") +
    theme_bw()



Kamis, 11 April 2019

Test kredibilitas client anda

Bagaimana caranya mengetahui sikap seseorang? mudah kalo kita sering bergaul dengannya, apalagi kalo teman kita cuma sedikit, gimana kalo lebih dari 100, 1000, atau bahkan lebih dari jutaan! apalagi sampai milyaran.


Kasus seperti ini mulanya yang mengilhami manusia untuk selalu mencari cara yang mudah, cepat, murah dan tepat. Dengan menggunakan machine learning terselesaikan masalahnya.

Kami coba membuat aplikasi untuk menguji kredibilitas client, data sintetis diambil dari sini, aplikasi ditulis dengan bahasa R dan disimpan dalam server shiny. Sebagian scriptnya ada di sini:

Rabu, 06 Maret 2019

Model Agnostic Explainers untuk Prediksi Individual

Breakdown - Model Agnostic Explainers untuk Prediksi Individual

Paket breakDown adalah alat model agnostik untuk dekomposisi prediksi dari black box.
Tabel Break Down menunjukkan kontribusi setiap variabel terhadap prediksi akhir. Break Down Plot menyajikan grafis yang simple.
Paket ini cocok untuk biner classification dengan model regresi.


Selasa, 05 Maret 2019

Hemat 4 juta dollar dengan Logistic Regression

Memilih model yang tepat untuk analisa bisnis.

Melanjutkan pembicaraan Exploratory Data Analysis di posting sebelumnya, di sini akan dibahas 2 model regresi, yaitu Logistic Regression dan Random Forest Regression. 2 Model ini banyak dipakai dalam bisnis ecommerce, juga bisnis sejenis lainnya, dimana banyak variable yang saling terkait, sehingga sulit bagi manajemen traditional untuk sekedar menebak variable mana yang paling berpengaruh terhadap kelangsungan bisnisnya.
Map of USA
USA Map

Karena orientasi bisnis adalah profit atas ROI(Rate of Investmen), maka perlu dicari model yang tepat, agar manajemen tidak meraba raba bahkan menebak variable mana yang paling berpengaruh, karena hal tersebut akan beresiko tinggi dan mengeluarkan banyak biaya jika salah dalam mengeksekusi kebijakan.
Di akhir artikel saya akan menyajikan skenario bisnis hipotetis di mana dengan menggunakan model yang tepat  dapat memproyeksikan penghematan tahunan sebesar $4juta dalam biaya retensi pelanggan. Penghematan biaya ini dicapai dengan mengoptimalkan ambang model Logistic Regression. Di sini dibuat beberapa asumsi dasar tentang akuisisi pelanggan dan biaya retensi pelanggan, untuk model perusahaan telekomunikasi.


#---Model prediction
Akan diuji terlebih dahulu antara Model Logistic Regression dan Model Random Forest
dengan test validasi dan Kfold validation untuk menghindari over fitting, berikut ulasannya dalam script R:

Selasa, 26 Februari 2019

Prediksi Individual Variable terhadap Target

Prediksi Individual Variable terhadap Target.

Melanjutkan posting terdahulu, akan ditambahkan prediksi klasifikasi pilihan mahasiswa
ketika masuk universitas, variablenya terdiri dari:

Tb1
lihat Tb1
Table cara mahasiswa masuk universitas:
1 . sesuai pilihan pertama dan cocok.
2.sesuai pilihan pertama dan tidak cocok.
3.bukan pilihan pertama tapi cocok.
4.bukan pilihan pertama  dan tidak cocok.

Senin, 25 Februari 2019

Faktor apa saja yang mempengaruhi nilai IPK seseorang?


Faktor apa saja yang mempengaruhi nilai IPK seseorang?Tentu pertanyaan itu tidak mudah dijawab, karena banyak factor yang mempengaruhi. Di sini akan dianalisa variable apa saja yang mempengaruhinya, dan prediksi apa saja yang akan didapatkan.
Data awal diambil dari data mahasiswa  data terdiri dari 129 observasi dan 66 variabel, akan dibatasi untuk  variable (MBTI, INTROVERT.I, SENSING.S, THINKING.T, JUDGING.J, E.EKSTROVERT, N.INTUITION, F.FEELING, dan IPK .

Model yang akan dicoba adalah model random forest(rf), model gradient boosting(gbm) dan model neural network(nn),  selanjutnya akan dipilih mana yang paling baik untuk prediksinya.
File excel

Berikut script R dan penjelasannya:

Financial Institutions Survey Analysis Part 1

Financial Institutions Survey Analysis  1. Data     Survey data consist of the 99 observations and 73 variables. This study focuses on asses...