Email             :
RPubs            : https://rpubs.com/JoHndes9
Department  : Business Statistics
Address         : ARA Center, Matana University Tower
                         Jl. CBD Barat Kav, RT.1, Curug Sangereng, Kelapa Dua, Tangerang, Banten 15810.



library(ggplot2)
library(readr)
library(dplyr)
library(caret)
library(class)
library(cluster)
library(factoextra)
set.seed(14280619)
generate_sales_data <- function(n) {
  data <- data.frame(
    ID_Pelanggan = 1:n,
    Usia = sample(18:70, n, replace = TRUE),
    Gender = as.factor(sample(c("Pria", "Wanita"), n, replace = TRUE)),
    Jumlah_Pembelian = sample(1:10, n, replace = TRUE),
    Total_Pembelian = sample(50:500, n, replace = TRUE),
    Jenis_Produk_Favorit = as.factor(sample(c("Elektronik", "Pakaian", "Makanan"), n, replace = TRUE))
  )
  return(data)
}

data=generate_sales_data(10000)
head(data)
##   ID_Pelanggan Usia Gender Jumlah_Pembelian Total_Pembelian
## 1            1   50 Wanita                7             453
## 2            2   18   Pria                5              63
## 3            3   53   Pria               10              72
## 4            4   29   Pria                2             150
## 5            5   47 Wanita                6             337
## 6            6   29   Pria                8             500
##   Jenis_Produk_Favorit
## 1           Elektronik
## 2              Pakaian
## 3              Makanan
## 4              Makanan
## 5              Makanan
## 6              Pakaian
write.csv(data,"UAS/data_uas.csv")

1 nomor 1

sumE=0
sumP=0
sumM=0
for(x in 1:length(data$ID_Pelanggan)){
  if(data$Jenis_Produk_Favorit[x] == "Elektronik"){
    sumE=sumE+data$Jumlah_Pembelian[x]
  }else 
    if(data$Jenis_Produk_Favorit[x] == "Pakaian"){
      sumP=sumP+data$Jumlah_Pembelian[x]
    }
  else
    if(data$Jenis_Produk_Favorit[x] == "Makanan"){
      sumM=sumM+data$Jumlah_Pembelian[x]
    }
}
sumALL=c(sumE,sumP,sumM)
sumpers=round(100*sumALL/sum(sumALL),3)
pie(sumALL,labels = sumpers,col = c("#FF8899","#8899FF","#99FF88"),main ="total jumlah pembelian")
legend("topright",c("Elektronik","Pakaian","Makanan"),fill=c("#FF8899","#8899FF","#99FF88"))

Bedarsarkan grafik ini, kita dapat melihat bahwa makanan meruoahkan barang yang paling sering dibeli, tetapi ketiga jenis produk memiliki jumlah pembelian yang hampir sama

ggplot(data,aes(x=Usia))+
  geom_histogram(binwidth = 2,fill="#013478",color="#FFFFFF") +
  labs(title = "histrogram usia",
       x="usia",
       y="frekuensi")

ggplot(data,aes(x=Gender))+
  geom_bar(fill="#013478",color="#FFFFFF") +
  labs(title = "histrogram usia",
       x="usia",
       y="frekuensi")

Dari kedua grafik ini, kita dapat mengambil kesimpulan bahwa, berdasarkan usia, pelanggan terbanyak memiliki umuer sekitar 62, dan kedua paling sering pada usia sekitar 40. sedangkan, jika berdasarkan jenis kelamin, tidak ada perbedaan antar kedua gender.

pelE=c()
pelP=c()
pelM=c()
GE=c()
GP=c()
GM=c()
for(x in 1:length(data$ID_Pelanggan)){
  if(data$Jenis_Produk_Favorit[x] == "Elektronik"){
    pelE=c(pelE,data$Usia[x])
    GE=c(GE,as.character(data$Gender[x]))
  }else 
    if(data$Jenis_Produk_Favorit[x] == "Pakaian"){
      pelP=c(pelP,data$Usia[x])
      GP=c(GP,as.character(data$Gender[x]))
    }
  else
    if(data$Jenis_Produk_Favorit[x] == "Makanan"){
      pelM=c(pelM,data$Usia[x])
      GM=c(GM,as.character(data$Gender[x]))
    }
}
pelED=data.frame(pelE,GE)
pelEM=data.frame(pelM,GM)
pelEP=data.frame(pelP,GP)
ggplot(pelEP,aes(x=pelP))+
  geom_histogram(binwidth = 2,fill="#013478",color="#FFFFFF") +
  labs(title = "histrogram usia pelanggan pakaian",
       x="usia",
       y="frekuensi")

ggplot(pelED,aes(x=pelE))+
  geom_histogram(binwidth = 2,fill="#01C9CC",color="#FFFFFF") +
  labs(title = "histrogram usia pelanggan Elektronik",
       x="usia",
       y="frekuensi")

ggplot(pelEM,aes(x=pelM))+
  geom_histogram(binwidth = 2,fill="#ff46e9",color="#FFFFFF") +
  labs(title = "histrogram usia pelangaan makanan",
       x="usia",
       y="frekuensi")

pada histrogram usia untuk pelanggan makanan terdapat paling banyak pelanggan pada sekitar usia 58 dan terlihat seperti ada pola cyclica. pada histrogram untuk pelanggan elektronik paling banyak pada usia sekitar 40 tahun. pada histogram untuk pelanngan makanan paling banyak pada usia sekitar usia 60 tahun dan/atau 68 tahun dan juga terlihat tersebar secara datar.

ggplot(pelED,aes(x=GE))+
  geom_bar(fill="#ff46e9",color="#000000") +
  labs(title = "histrogram usia pelangaan elektronik",
       x="gender",
       y="frekuensi")

ggplot(pelEM,aes(x=GM))+
  geom_bar(fill="#deaea9",color="#000000") +
  labs(title = "histrogram usia pelangaan makanan",
       x="gender",
       y="frekuensi")

ggplot(pelEP,aes(x=GP))+
  geom_bar(fill="#edeab5",color="#000000") +
  labs(title = "histrogram usia pelangaan pakaian",
       x="gender",
       y="frekuensi")

Jadi berdasarkan grafik-grafik diatas, dapat dibilang bahwa, lebih banyak pelanggan pria pada produk elektronik, lebih banyak pelanggan wanita untuk produk pakaian, dan jumlah pelnaggan pria dan wanita sama untuk produk makanan

1.1 klasifikasi

Target dari klasifikasi yang akan dilakukan adalah jenis produk favorit. Saya memilih target tersebut karena dapat digunakan untuk memprediksikan produk yang diinginkan pelanggan dengan mudah

Metode klasifikasi yang akan digunakan adalah model decision tree, karena model ini dapat memproses data yang bukan numerik yang dapat mempengaruhi hasil dari prediksi model.

set.seed(16185150)
data2=data[,-c(1,3,6)]
target=data[,6]
train_index=createDataPartition(data$Jenis_Produk_Favorit,p=0.7,list=F)
train_data=data[train_index,]
test_data=data[-train_index,]
model_tree=train(Jenis_Produk_Favorit ~ Usia+Gender+Jumlah_Pembelian+Total_Pembelian,data=train_data,method="rpart")
prediksi=predict(model_tree,newdata = test_data)
confusionMatrix(prediksi,test_data[,6])
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   Elektronik Makanan Pakaian
##   Elektronik          0       0       0
##   Makanan           995    1016     988
##   Pakaian             0       0       0
## 
## Overall Statistics
##                                          
##                Accuracy : 0.3388         
##                  95% CI : (0.3218, 0.356)
##     No Information Rate : 0.3388         
##     P-Value [Acc > NIR] : 0.5069         
##                                          
##                   Kappa : 0              
##                                          
##  Mcnemar's Test P-Value : NA             
## 
## Statistics by Class:
## 
##                      Class: Elektronik Class: Makanan Class: Pakaian
## Sensitivity                     0.0000         1.0000         0.0000
## Specificity                     1.0000         0.0000         1.0000
## Pos Pred Value                     NaN         0.3388            NaN
## Neg Pred Value                  0.6682            NaN         0.6706
## Prevalence                      0.3318         0.3388         0.3294
## Detection Rate                  0.0000         0.3388         0.0000
## Detection Prevalence            0.0000         1.0000         0.0000
## Balanced Accuracy               0.5000         0.5000         0.5000

2 nomor 2

Jadi, untuk menentukan jumlah kluster yang akan di buat akan digunakan 3 metode yaitu elbow, silhoutte, dan gap statistic.

numerik=data[,c(2,4,5)]
scaled=scale(numerik)
fviz_nbclust(scaled,kmeans,method = "wss")

Menurut metode elbow, jumlah kluster yang optimal berada pada 4 sampai 6 kluster

fviz_nbclust(scaled,kmeans,method = "silhouette")

Menurut metode silhoutte, jumlah kluster yang optimal adalah 9 kluster

fviz_nbclust(scaled,kmeans,method = "gap_stat")

Menurut metode gap statistic, jumlah kluster yang optimal adalah 1 kluster

Jadi, akan dibuat 5 kluster, karena, menurut saya, 9 kluster terlalu banyak dan satu kluster terlalu sedikit.

Algoritma yang akan digunakan adalah algoritma kmeans karena kmeans membuat kluster yang mudah dienterpertasikan dan juga bisa digunakan untuk dataset yang besar dengan waktu yang relative cepat.

set.seed(993134269)
clusters=kmeans(scaled,centers = 5)
fviz_cluster(clusters,data = scaled)

plot(data,col=clusters$cluster)

3 nomor 3

Model dari klasifikasi yang telah duibuat tidak akurat, ini mungkin terjadi karena mungkin metode yang digunakan kurang cocok, atau data tidak memiliki pola yang cukup signifikan yang dapat digunakan oleh metode yang digunakan. model klasifikasi ini sebaiknya tidak dipakai karena akurasinya yang sangat rendah.

Untuk cluster yang dibuat, sudah terlihat cukup baik, kekuranganya hanya pada kluster empat dan dua dimana kedua cluster tidak terlihat jelas.

Perusahaan dapat menggunakan hasil kluster untuk lebih bisa memberi advertisement yang lebih menarik untuk pelanggan pada kluster-kluster berdasarkan karakteristik kluster tersebut.

4 nomor 4

Hasil dari analisis ini akan jelaskan pada rapat perusahaan dan akan diberi pada beberapa departmen yang bisa menggunkanya.

Beberapa tantangan yang mungkin dihadapi adalah

  • ada yang kurang mengerti hasil analisis.
  • ada yang kurang megerti terhadap megapa analisis ini mungkin penting terhadap departmen mereka

Cara untuk menghadapi beberapa masalah tersebut:

  • mencoba meenyakan bagian mana yang mereka tidak mengerti dan menjelaskanya lebih lanjut.
  • memperjelas hubungan dari hasil analisis dengan perkerjaan mereka dan mungkin juga memberi sugesti bagaimana hasil analisis dapat digunakan