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()



Sabtu, 20 April 2019

Cara deteksi fraud data pemilu

Fraud dan cara deteksinya.
Andai saja th 1977  ketua LPES berani mengumumkan hasil quick count yang dilakukannya, mungkin rejim ORBA akan berakhir lebih cepat, karena hasil quick count waktu itu memang berbeda jauh dengan hasil perhitungan PPI(KPUnya waktu itu), mungkin juga tidak akan terjadi kerusuhan 1998. Tapi sejarah memang sudah tersurat dan tinggal kita ambil hikmahnya.
https://nwcua.org/category/compliance/fraud-alert/

Menyambung postingan sebelumnya, akan dibahas tentang fraud data, tidak ada salahnya kita tengok beberapa tokoh dibalik lahirnya Benford Law, Frank Benford seorang insinyur di General Electric yang membuat formula untuk mencari fraud yang kemudian dikenal dengan Benford Law, sebenarnya landasan teorinya sudah ditemukan sejak lama oleh ilmuwan Amerika Simon Newcomb pada tahun 1880-an.
Teori.
Filosofi teorinya sederhana, bahwa  angka yang mengandung digit 1 selalu lebih besar probabiltas munculnya dibandingkan yang lain, contoh ambil  urutan angka 1-50, probabilitas munculnya angka, 1,10,11,12,13,14,15,16,17,18,19,21,31,41, ada 14 angka, sementara angka yang mengadung digit 2 adalah 2,20,21,22,23,24,25,26,27,28,29,32,42, ada 13 angka, dan 3, 30,31,32,33,34,35,36,37,38,39,43 ada 12 angka, demikian seterusnya. Cerita singkatnya setelah Frank Benford bereksperiment selama 50 th dengan berbagai kasus menemukan formula yang disebut Benford Law :

Kamis, 18 April 2019

Mungkinkah ada fraud di pemilu kita?


Indonesia sudah melakukan pemilu 11 kali, th 2004 mulai dilakukan pemilu terbuka, saat itu pemenangnya adalah SBY menang pada putaran kedua. Setelah quick count dirilis dan memenangkannya, rakyat mulai percaya quick count setelah hasilnya tidak beda jauh dengan hasil perhitungan KPU.
Ini aseli jariku
Sebenarnya Indonesia sudah mulai melakukan quick count sejak th 1977, LPES secara diam diam melakukan quick count tentang pemilu saat itu dan hasilnya  mencengankan karena berbeda dengan hasil yang dirilis PPI(Panitia Pemilih Indonesia) atau KPUnya saat itu. Tapi Rustam Efendi ketuaLPES saat itu tidak berani mengumumkannya di era ORBA.
Selanjutnya th 2004, saat Pilpres dimulai dengan pemilihan langsung oleh rakyat, quick count mulai akrab dan selalu dinanti keahdirannya. Pilpers 2004 yang dimenangkan SBY juga tidak lepas diketahui dengan cepat lewat quick count. Rakyat mulai percaya setelah hasil quick count tidak beda jauh dengan perhitungan KPU.
Sejak saat itu quick count selalu dinantikan kehadirannya saat pencoblosan selesai, karena memang hasil quick count tidak pernah meleset.
Nah yang mungkin membuat kita terheran heran, kenapa kok kubu No 2 bisa mengasilkan quick count yang hasilnya berkebalikan dengan quick count yang dilakukan lembaga survay yang sudah diakui KPU.

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:

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...