-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathBYS_donemproje_bolumII_TROIA.Rmd
308 lines (210 loc) · 17.3 KB
/
BYS_donemproje_bolumII_TROIA.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
---
title: "Bilgi Yönetim Sistemleri - Bitirme Projesi Rapor :
Semih Sarı 200401071,
Merve Yılmaz 210401009,
Berat Öcal 200401017,
Ümit Atakan Günel 210401004"
output:
html_document:
df_print: paged
pdf_document: default
---
## Q1: İş probleminin tanımı
Şirketimiz, hizmet verenler ile hizmet almak isteyenleri buluşturmaktadır. Kullanıcılar, bilgisayar veya akıllı telefonları üzerinden birkaç dokunuşla temizlik, tadilat, nakliyat gibi çeşitli hizmetlere kolayca ulaşabilmektedir. Bu raporda, Troia platformunda hizmet alan kullanıcıların almış oldukları servis ve kategorileri içeren veri seti kullanılarak, Association Rule Learning yöntemi ile bir ürün tavsiye sistemi oluşturulması hedeflenmektedir.Bu sistem, kullanıcıların ilgilerine göre hizmet önerileri sunarak müşteri memnuniyetini ve hizmet kalitesini artırmayı amaçlamaktadır.
SuiteCRM'in müşteri yönetimi, satış yönetimi, pazarlama otomasyonu ve raporlama özelliklerinden yararlanılarak bu hedefe ulaşılacaktır. SuiteCRM'in açık kaynaklı ve özelleştirilebilir yapısı, düşük maliyetli ve esnek çözümler sunarak iş süreçlerinin optimize edilmesine katkı sağlayacaktır. Bu nedenle SuiteCRM, bu proje için ideal bir BYS platformu olarak seçilmiştir.
## Q2: İş problemini çözmede kullanılacak data seti
### Veri Seti
*******************************
*Veri seti müşterilerin aldıkları servislerden ve bu servislerin kategorilerinden oluşmaktadır.*
*Alınan her hizmetin tarih ve saat bilgisini içermektedir.*
- **UserId**: Müşteri numarası
- **ServiceId**: Her kategoriye ait anonimleştirilmiş servislerdir. (Örnek : *Temizlik* kategorisi altında *koltuk yıkama* servisi)
- *Bir ServiceId farklı kategoriler altında bulanabilir ve farklı kategoriler altında farklı servisleri ifade eder.*
- (Örnek: CategoryId’si *7* ServiceId’si *4* olan hizmet *petek temizliği* iken CategoryId’si *2* ServiceId’si *4* olan hizmet *mobilya montaj*)
- **CategoryId**: Anonimleştirilmiş kategorilerdir. (Örnek : *Temizlik, nakliyat, tadilat* kategorisi)
- **CreateDate**: Hizmetin satın alındığı tarih
- **Ad**: Müşteri adı
- **Soyad**: Müşteri soyadı
- **email**: Müşteri e-posta adresi
```{r echo=FALSE}
library(readr)
df <- read_csv("data_raw.csv",show_col_types = FALSE)
head(df)
```
### Veri Seti Kaynağı
Bu veri seti, Kaggle platformundan bulunmuştur. [Armut Data](https://www.kaggle.com/datasets/sumeyraaksekiboz/armut-data/data) adlı veri setidir.
- **Veriyi Toplayan/Yaratanlar**: Veri setini oluşturanlar, Armut platformu tarafından müşterilerin hizmet satın alma işlemleri sırasında otomatik olarak toplanmış verileri derlemiştir.
- **Veri Toplama Yöntemi**: Armut platformu, kullanıcıların platform üzerindeki hizmet taleplerini ve satın alımlarını kaydederek bu veriyi oluşturmuştur.
### Veri Üzerinde Yapılan Değişiklikler
Veri seti üzerinde herhangi bir değişiklik yapılmamıştır. Ancak sentetik veri eklemek için ad, soyad ve e-posta bilgileri gibi ek alanlar oluşturulmuştur.
### Sentetik Veri Üretimi
Sentetik veri eklemek için ad, soyad ve e-posta bilgileri gibi ek alanlar oluşturulmuştur. Bu bilgiler, gerçek kullanıcı verilerinden türetilmemiş ve rastgele oluşturulmuştur. Sentetik veri eklemek için kullanılan süreç, sentetik veri üretimi için yaygın olarak kullanılan Python kütüphaneleri kullanılarak gerçekleştirilmiştir.
**Sonuç**
Bu veri seti, müşterilerin hizmet satın alma alışkanlıklarını analiz etmek ve hizmet kategorileri arasındaki ilişkileri incelemek için kullanılacaktır. Kaggle platformundan elde edilen bu veri seti, gerçek dünya kullanıcı davranışlarını temsil etmektedir ve çeşitli analizler için potansiyel sunmaktadır. Sentetik veri eklenerek, veri setinin zenginleştirilmesi ve daha geniş kapsamlı analizler yapılabilmesi sağlanmıştır.
## Q3: Veri Seti Keşifsel Analizi
### Önemli Sütunlar ve Veri Tipleri
*Bu tabloda veri setindeki önemli sütunlar ve bunların veri tipleri yer almaktadır.*
```{r echo=FALSE}
library(knitr)
columns_data <- data.frame(
Sutun = c("UserId", "ServiceId", "CategoryId", "CreateDate", "Ad", "Soyad", "email"),
Veri_Tipi = c("Sayısal", "Sayısal", "Sayısal", "Tarih/Zaman", "Metin", "Metin", "Metin")
)
kable(columns_data, caption = "Önemli Sütunlar ve Veri Tipleri", align = "c")
```
### Özellik Çıkarımı
#### Hizmet Sütununun Oluşturulması
Veri setinde ServiceId ve CategoryId sütunları birleştirilerek yeni bir Hizmet sütunu oluşturulmuştur. Bu işlem, her hizmetin kategorisiyle birlikte benzersiz bir tanımının yapılmasını sağlamaktadır. Bu sayede, hizmet ve kategori ilişkisi daha net bir şekilde analiz edilebilmektedir.
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE)
```
```{r echo=FALSE}
# Gerekli kütüphaneleri yükle
library(dplyr)
# Hizmet sütununu oluştur
df <- df %>%
mutate(Hizmet = paste(ServiceId, CategoryId, sep = "_"))
```
#### Sepet Tanımının Oluşturulması
Veri seti hizmetlerin alındığı tarih ve saat bilgilerini içermektedir, ancak herhangi bir sepet tanımı (örneğin fatura vb.) bulunmamaktadır. Association Rule Learning uygulayabilmek için bir sepet tanımı oluşturulması gerekmektedir. Bu çalışmada, sepet tanımı her bir müşterinin aylık aldığı hizmetler olarak belirlenmiştir.
Örneğin, 7256 id'li müşteri 2017'nin 8. ayında aldığı hizmetler bir sepeti, 2017'nin 10. ayında aldığı hizmetler ise başka bir sepeti ifade etmektedir. Sepetleri benzersiz bir ID ile tanımlamak için öncelikle sadece yıl ve ay içeren yeni bir NEW_DATE değişkeni oluşturulmuş ve UserId ile bu yeni tarih değişkeni birleştirilerek SepetID adlı yeni bir değişken oluşturulmuştur.
```{r echo=FALSE}
# Sadece yıl ve ay içeren yeni bir tarih sütunu oluşturma
df <- df %>%
mutate(NEW_DATE = format(CreateDate, "%Y-%m"))
# SepetID sütununu oluşturma
df <- df %>%
mutate(SepetID = paste(UserId, NEW_DATE, sep = "_"))
# Sadece 7256 id'li kullanıcıyı ve 2017-08 tarihini seçme ve ilgili sütunları gösterme
df_selected <- df %>%
filter(UserId == 7256 & NEW_DATE == "2017-08") %>%
select(UserId, Hizmet, NEW_DATE, SepetID)
# Sonuçları görüntüle
df_selected
```
**SepetID Sütununun Oluşturulması**
Her bir müşterinin aylık aldığı hizmetlerin bir sepet olarak tanımlanabilmesi için `SepetID` sütunu oluşturulmuştur. Bu işlem, kullanıcı kimliği (`UserId`) ve hizmetin alındığı tarih (`CreateDate`) kullanılarak yapılmıştır. `CreateDate` sütunundan sadece yıl ve ay bilgileri alınarak `NEW_DATE` sütunu oluşturulmuş ve ardından `UserId` ile birleştirilerek `SepetID` sütunu elde edilmiştir.
*Aşağıdaki tabloda veri setinin son hali görünmektedir.*
```{r echo=FALSE}
library(dplyr)
# NEW_DATE sütununu oluştur
df <- df %>%
mutate(NEW_DATE = format(as.Date(CreateDate), "%Y-%m"))
# SepetID sütununu oluştur
df <- df %>%
mutate(SepetID = paste(UserId, NEW_DATE, sep = "_"))
# İlk birkaç satırı görüntüle
head(df)
```
### Eksik Veri Analizi
*Veri setindeki eksik verilerin analizi yapılmıştır. Bu analiz, hangi sütunlarda ve ne oranda eksik veri bulunduğunu göstermektedir.*
```{r echo=FALSE}
# Eksik Veri Analizi Tablosu
missing_data <- data.frame(Sutun = colnames(df), Eksik_Veri_Yuzdesi = colMeans(is.na(df)) * 100)
missing_data
```
### Kategorik Değişken Dağılımı
Kategori dağılımı, her bir kategoride bulunan hizmet sayısını göstermektedir. Aşağıdaki grafik, veri setinde en çok alınan hizmet kategorilerini
görselleştirmektedir.
```{r echo=FALSE}
# CategoryString sütununu oluşturuyorum
df <- df %>%
mutate(CategoryString = case_when(
CategoryId == 0 ~ "TEMIZLIK",
CategoryId == 1 ~ "TADILAT",
CategoryId == 2 ~ "NAKLIYAT",
CategoryId == 3 ~ "TAMIR",
CategoryId == 4 ~ "OZEL_DERS",
CategoryId == 5 ~ "SAGLIK",
CategoryId == 6 ~ "ORGANIZASYON",
CategoryId == 7 ~ "FOTOGRAF_VE_VIDEO",
CategoryId == 8 ~ "DIJITAL_VE_KURUMSAL",
CategoryId == 9 ~ "EVCIL_HAYVANLAR",
CategoryId == 10 ~ "OTO_VE_ARAC",
CategoryId == 11 ~ "DIGER"
))
# Kategori Dağılımı Grafiği
library(ggplot2)
category_distribution <- table(df$CategoryString)
category_distribution_df <- data.frame(Kategori = names(category_distribution), Frekans = as.numeric(category_distribution))
ggplot(category_distribution_df, aes(x = reorder(Kategori, -Frekans), y = Frekans)) +
geom_bar(stat = "identity", fill = "skyblue") +
labs(title = "CategoryId Dağılımı", x = "Kategori", y = "Frekans") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
```
*Grafikten görüleceği üzere, veri setinde en çok alınan hizmet kategorisi birinci sırada 4 ID'li "OZEL_DERS" kategorisi, ikinci sırada ise 0 ID'li "Temizlik" kategorisi yer almaktadır*
### Benzersiz Değer Kontrolü
Veri setindeki sütunlarda kaç farklı benzersiz değer bulunduğu incelenmiştir. Bu analiz, veri setindeki çeşitliliği ve potansiyel anormallikleri tespit etmeye yardımcı olmaktadır.
``` {r echo = FALSE}
# Benzersiz değerlerin kontrolü
unique_values <- lapply(df, unique)
unique_table <- data.frame(Sutun = names(unique_values), Benzersiz_Degerler = sapply(unique_values, length))
kable(unique_table, caption = "Benzersiz Değerler", align = "c")
```
### Sayısal Değişkenler İçin Temel İstatistikler
Sayısal ve tarih bilgisi içeren değişkenler için temel istatistikler hesaplanmıştır. Bu istatistikler, veri setindeki sayısal değerlerin genel dağılımını ve özetini sunmaktadır.
``` {r echo = FALSE}
# Sayısal Değişkenler için Temel İstatistikler
# Ad, Soyad ve Email Değişkenlerini Filtrele
numeric_df <- df[, !(colnames(df) %in% c("Ad", "Soyad", "email" , "Hizmet","NEW_DATE","SepetID"))]
# Temel İstatistikler
numeric_summary <- summary(numeric_df)
kable(numeric_summary, caption = "Sayısal Değişkenler İçin Temel İstatistikler", align = "c")
```
## Q4: Veri Setinin BYS Platformuna İhtali
1. **SuiteCRM'in AWS Üzerine Kurulumu:**
SuiteCRM, müşteri ilişkileri yönetimi için açık kaynaklı bir platformdur. AWS (Amazon Web Services) üzerinde SuiteCRM kurulumu gerçekleştirerek, müşteri verilerini etkili bir şekilde yönetmek ve iş süreçlerini optimize etmek için bir altyapı oluşturulmuştur. AWS'nin sağladığı esneklik ve güvenilirlik, SuiteCRM'in bulut tabanlı bir çözüm olarak hızlı ve verimli bir şekilde kurulmasını sağlamıştır.
2. **Veri Seti İçin Modül Oluşturma:**
SuiteCRM, modüler bir yapıya sahiptir ve kullanıcılar özelleştirilmiş modüller oluşturarak platformu ihtiyaçlarına göre şekillendirebilirler. Bu bağlamda, proje için gereken veri setine uygun bir modül oluşturulmuştur. Bu modül, müşterilerin hizmet alımıyla ilgili verileri depolamak ve yönetmek için tasarlanmıştır. Modül, müşteri verilerini düzenli bir şekilde kaydetmek ve erişmek için gerekli araçları sağlar.
3. **Veri Seti Dosyasının CSV Formatında Yüklenmesi:**
Oluşturulan modül üzerine, proje için gereken veri seti dosyası sistem arayüzü kullanılarak CSV formatında yüklenmiştir. CSV formatı, veri setlerini kolayca okunabilir ve işlenebilir hale getirir. Veri seti, SuiteCRM'in sağladığı veri yönetim araçları kullanılarak sisteme yüklenmiştir. Bu adım, veri setinin CRM platformuna entegrasyonunu sağlar ve veri setinin SuiteCRM içinde kullanılabilir hale gelmesini sağlar.
Veri yükleme işlemi sırasında API kullanılmamıştır, ancak SuiteCRM'in sağladığı API'ler sayesinde bu işlem gerçekleştirilebilir. API'ler, farklı sistemler arasında veri alışverişi yapılmasını sağlar ve otomatik veri senkronizasyonunu mümkün kılar. Bu nedenle, projenin ilerleyen aşamalarında veri çekme işlemlerinde SuiteCRM REST API'den yararlanılacaktır.
## Q5 : Yapılması planlanan veri analizi
### Hizmet Tavsiye Sistemi Oluşturma:
#### Görev 1: Veriyi Hazırlama
1. **Veri Okuma ve Temizleme**
2. **Hizmetleri Temsil Eden Yeni Değişkenin Oluşturulması:**
- ServiceId ve CategoryId birleştirilerek hizmetleri temsil eden yeni bir değişken oluşturulacak. Bu, her hizmetin kategoriye ve hizmete göre tekil olarak tanımlanmasını sağlayacak.
3. **Sepet Tanımının Oluşturulması:**
- Müşterilerin aylık aldıkları hizmetler sepet olarak tanımlanacak ve her bir sepete benzersiz bir ID atanacak. Bu, her müşterinin hizmet alımlarının zaman içinde nasıl değiştiğini izlememize olanak tanıyacak.
#### Görev 2: Birliktelik Kuralları Üretme
1. **Sepet-Hizmet Pivot Tablosunun Oluşturulması:**
- Müşterilerin aldıkları hizmetleri içeren bir sepet-hizmet pivot tablosu oluşturulacak. Bu tablo, her bir müşteri sepetinin hizmetlerle ilişkisini gösterecek.
2. **Apriori Algoritması Kullanarak Birliktelik Kurallarının Üretilmesi:**
- Apriori algoritması, müşterilerin birlikte aldığı hizmetler arasındaki ilişkileri belirlemek için kullanılacak. Belirli bir destek değeri üzerinde olan sık görülen hizmet kombinasyonlarını tespit edecek.
3. **Hizmet Önerisinde Bulunma:**
- Belirli bir hizmeti alan bir kullanıcıya hizmet önerisinde bulunulacak. Bu öneri, Apriori algoritması ile tespit edilen birliktelik kurallarına dayanarak yapılacak. Önerilen hizmetler, müşterinin geçmiş alımları ve benzer müşterilerin tercihleri dikkate alınarak belirlenecek.
#### Zaman Serisi Analizi Yapma
1. **Veri Hazırlığı**
2. **Zaman Serisi Analizi Yöntemlerinin Uygulanması:**
- Zaman serisi analizi için uygun yöntemler seçilip uygulanacak. Bu yöntemler arasında hareketli ortalama, trend analizi, mevsimsellik analizi gibi teknikler yer alabilir.
3. **Grafik Çizimi ve Sonuçların Değerlendirilmesi:**
- Verilerden grafikler çizilerek, zaman serisi analizi sonuçları görselleştirilecek. Grafikler incelenerek, varsa trendler, mevsimsellik veya diğer önemli desenler tespit edilecek. Ayrıca, grafikler üzerinde istatistiksel operasyonlar uygulanarak, verilerin ortalama, median gibi özellikleri değerlendirilecek.
4. **Problemlerin Belirlenmesi ve Çözüm Önerileri:**
- Grafikler üzerinde tespit edilen problemler gözlemlenecek. Bu problemlere yönelik çözüm önerileri sunulacak.
## Q6 : Çalışan platformun gösterildiği sesli anlatımlı video
URL: [BYS_donemproje_bolumII_TROIA](https://www.youtube.com/watch?v=XYyGBIR7-1M)
## Final
### Hizmet Tavsiye Sistemi
Projenin analiz kodları python ile oluşturulmuştur. İlgili kodlara [buradan](https://github.com/COMU-BLM4022/donemproje1_TROIA/blob/main/Veri_Analizi.py) ulaşabilirsiniz.
#### Sepet Tanımının Oluşturulması
Müşterilerin aylık aldıkları hizmetler sepet olarak tanımlanmış ve her bir sepete benzersiz bir ID atanmıştır. Bu, her müşterinin hizmet alımlarının zaman içinde nasıl değiştiğini izlememize olanak tanımıştır.
![Hizmet ve SepetID](Tables/hizmet_sepet.png)
#### Birliktelik Kuralları Üretme
Birliktelik kuralları, müşterilerin birlikte aldığı hizmetler arasındaki ilişkileri belirlemek için kullanılmıştır. Bu süreçte aşağıdaki adımlar izlenmiştir
##### Sepet-Hizmet Pivot Tablosunun Oluşturulması
Müşterilerin aldıkları hizmetleri içeren bir sepet-hizmet pivot tablosu oluşturulmuştur. Bu tablo, her bir müşteri sepetinin hizmetlerle ilişkisini göstermektedir.
![Sepet-Hizmet Pivot Tablosu](Tables/pivot_table.png)
##### Apriori Algoritması Kullanarak Birliktelik Kurallarının Üretilmesi
Apriori algoritması, müşterilerin birlikte aldığı hizmetler arasındaki ilişkileri belirlemek için kullanılmıştır. Belirli bir destek değeri üzerinde olan sık görülen hizmet kombinasyonları tespit edilmiştir.
![Birliktelik Kuralları](Tables/rules.png)
*Yukarıdaki tabloda birliktelik kuralları bulunmaktadır. Tavsiye algoritmasında confidence ve lift değerleri kullanılacaktır.*
##### Hizmet Önerisinde Bulunma
Belirli bir hizmeti alan bir kullanıcıya hizmet önerisinde bulunulmuştur. Bu öneri, Apriori algoritması ile tespit edilen birliktelik kurallarına dayanarak yapılmıştır. Önerilen hizmetler, müşterinin geçmiş alımları ve birliktelik kuralları kullanılarak yapılmıştır.
### Zaman Serisi Analizi
Zaman serisi analizi, hizmetlerin zaman içindeki değişimlerini incelemek için yapılmıştır. Zaman serisi analizinin amacı, hizmet taleplerindeki trend bazlı değişiklikleri tespit etmektir.
![Hizmet Zaman Serisi Analizi ](Tables/zaman_serisi.png)
*Son aylarda bir düşüş olduğu görülmektedir. Bundan yola çıkarak komisyonlarda indirime gidilebilir. İleriki aylarda kampanyalar düzenlenebilir.*
## Sonuç
Bu analiz sonucunda, hizmetler arasındaki ilişkileri ve müşterilerin hizmet alım davranışlarını daha iyi anlamak için birliktelik kuralları kullanılarak hizmet önerileri oluşturulmuştur. Bu sistem, müşterilerin ilgilerine göre hizmet önerileri sunarak müşteri memnuniyetini ve hizmet kalitesini artırmayı hedeflemektedir.
Öneri sisteminin performansını artırmak ve daha kapsamlı analizler yapmak için veri setinin genişletilmesi ve farklı algoritmaların kullanılması mümkündür. Ayrıca, zaman serisi analizi ile elde edilen sonuçlar doğrultusunda mevsimsel kampanyalar ve müşteri sadakat programları oluşturulabilecektir.