Ana içeriğe atla

Satışta Veri Bilimi: Müşteri Duygu Analizi

Veri biliminin müşteri duygularını analiz etmek ve satış optimizasyonu için değerli içgörüler sunmak amacıyla nasıl kullanılabileceğini öğrenin.
Güncel 31 Ağu 2026  · 9 dk. oku

Yapay Zekâyla Keşfet

ChatGPTClaudePerplexity

Yapay Zekâ Konsepti İllüstrasyonu

Veri bilimi kullanım alanları, büyük miktarda verinin biriktiği veya birikebileceği neredeyse her sektörle ilişkili olabilir.  Mağazalar ve e-ticaret siteleri, pazarlama kampanyalarıyla çekilen insanların gerçek müşteri deneyiminin yaşandığı ve belirli bir marka ya da şirketin değerli satın alma verilerinin toplandığı yerlerdir. İnsanlar burada, belirli bir ürünü gerçekten satın almak isteyip istemediklerine, daha önce planlamadıkları başka bir şeyi alıp almayacaklarına, ne kadar ödemeye hazır olduklarına, bu mağazaya geri dönüp dönmeyeceklerine ve müşteri deneyimleri hakkında nasıl bir değerlendirme bırakacaklarına karar verirler. 

Gerçekten de müşteri yorumları, tüm satış sürecinde nelerin değiştirilebileceğini veya güçlendirilebileceğini analiz etmek ve anlamak için sağlam bir veri kaynağıdır. Verileri bu şekilde analiz etmek; maliyetleri azaltmayı, operasyonel verimliliği artırmayı, müşteri deneyimini iyileştirmeyi, yeni fırsatları ortaya çıkarmayı, işletmeyi büyütmeyi ve nihayetinde geliri artırmayı sağlayabilir. Gelin, bu değerli bilgilerin veri bilimi algoritmaları kullanılarak nasıl analiz edilip modellenebileceğine yakından bakalım; böylece gizli içgörüleri elde edelim ve her bir bireysel müşterinin genel mesajını yakalayalım.

Satışta Veri Bilimi Kullanım Alanı: Müşteri Duygu Analizi 

Müşteri duygu analizi, belirli bir şirketin hizmetlerini veya ürünlerini kullanan müşterilerin duygularını otomatik olarak belirleme sürecidir. Bu genellikle çevrimiçi anketlerden, sosyal medyadan, destek taleplerinden, geri bildirim formlarından, ürün yorumlarından, forumlardan, telefon görüşmelerinden, e-postalardan ve sohbet botlarından toplanan yapılandırılmamış metin verileridir. Makine öğreniminde müşteri duygu analizi, metin verilerinden doğrudan olumlu, olumsuz ve nötr duyguları çıkarmak için istatistiksel ve dilbilimsel yöntemler uygulayan doğal dil işleme (NLP) ile gerçekleştirilir. Özünde iki parametre üretir:

  • Kutupluluk: bir duygunun olumlu mu olumsuz mu olduğunu gösterir.
  • Büyüklük: o duygunun gücünü gösterir.

Müşteri duygu analizi, eyleme geçirilebilir içgörüler elde etmeye, müşterileri mutsuz eden kritik tekrarlayan sorunları tespit edip düzeltmeye, müşterilerin olumlu duygularına yol açan ürün veya hizmet özelliklerini güçlendirmeye ve genel olarak daha verimli, veriye dayalı kararlar almaya yardımcı olduğundan, modern işletmeler için temel bir araçtır. Daha ayrıntılı düzeyde, müşteri duygu analizi şunları yapmamıza olanak tanır:

  • müşteri hizmetlerini ve dolayısıyla müşteri deneyimlerini iyileştirmek,
  • müşteri sadakatini artırmak,
  • churn oranını azaltmak,
  • ürün ve hizmetleri zamanında güncellemek,
  • pazarlama kampanyalarını optimize etmek,
  • yeni trendleri ve pazarları öngörmek,
  • şirketimizin yüksek itibarını korumak,
  • kârı artırmak.

Her metin analizi görevinde olduğu gibi, müşteri duygu analizi yürütülürken bazı tuzaklarla karşılaşılabilir. Örneğin, NLP algoritması bazı yorumlardaki alayı yakalayamaz ve onları yanlış kategorize eder. Bazen çok spesifik kısaltmaları veya nadiren kullanılan argo kelimeleri de çözemeyebilir.

Veri Kümesini Hazırlama

IMDB film yorumlarından oluşan bir veri kümesini kullanarak müşteri duygu analizinin pratikte nasıl çalıştığını keşfedelim:

import pandas as pd

movies = pd.read_csv('movies.csv', index_col=0).reset_index(drop=True)
print(f'Number of reviews: {movies.shape[0]:,}\n')
print(movies.head())
Number of reviews: 7,501

                                              review  label
0  This short spoof can be found on Elite's Mille...      0
1  A singularly unfunny musical comedy that artif...      0
2  An excellent series, masterfully acted and dir...      1
3  The master of movie spectacle Cecil B. De Mill...      1
4  I was gifted with this movie as it had such a ...      0

İki sütunumuz var: biri her yorumun metnini, diğeri genel duygu tahminini içeriyor: pozitif (1) veya negatif (0).

Pozitif ve negatif yorumların yüzdesini hesaplayalım:

round(movies['label'].value_counts()*100/len(movies['label'])).convert_dtypes()
0    50
1    50
Name: label, dtype: Int64

Dolayısıyla pozitif ve negatif yorumların oranları neredeyse eşit.

BOW Yöntemini Uygulama 

Bir makine öğrenimi modeli yalnızca sayısal özelliklerle çalışabildiği için bir sonraki adımımız metin verisini sayısal forma dönüştürmek olacak. Özellikle, her bir kelimenin ilgili yorumda kaç kez geçtiğini sayan özellikler oluşturacağız. Bu amaç için en temel ve doğrudan yaklaşım, belgede geçen tüm kelimelerden bir sözlük oluşturan ve her yorumda her kelimenin sıklığını sayan kelime torbası (bag-of-words, BOW) yöntemidir. Sonuç olarak, her kelime için karşılık gelen sıklıklarla birlikte yeni özellikler elde edeceğiz.

BOW yöntemini veri kümemize uygulayalım:

from sklearn.feature_extraction.text import CountVectorizer

# Creating new features
vect = CountVectorizer(max_features=200)
vect.fit(movies.review)
X_review = vect.transform(movies.review)
X_df = pd.DataFrame(X_review.toarray(), columns=vect.get_feature_names())

# Combining the new features with the label
movies_bow = pd.concat([movies['label'], X_df], axis=1)
print(movies_bow.head())
  label  10  about  acting  action  actors  actually  after  again  all  ...  \
0      0   0      0       0       0       0         0      0      0    0  ...  
1      0   1      0       1       0       1         0      0      0    3  ...  
2      1   0      0       0       0       0         0      1      0    0  ...  
3      1   0      0       0       1       0         0      0      0    0  ...  
4      0   1      0       0       1       0         0      0      0    3  ...  

  will  with  without  work  world  would  years  you  young  your 
0     0     1        0     0      0      1      0    0      0     0 
1     2     7        1     0      0      2      0    3      0     2 
2     0     2        0     0      0      0      0    0      1     0 
3     0     0        0     0      0      0      0    1      1     0 
4     0     2        0     1      0      0      0    0      0     0 

[5 rows x 201 columns]

Yukarıda, olası model aşırı uyumunu önlemek ve yalnızca en sık kullanılan 200 kelimeyi dikkate almak için isteğe bağlı max_features parametresini uyguladık.

Duyguyu Tahmin Etmek İçin Denetimli Bir Makine Öğrenimi Modeli Kullanma

Şimdi, duyguyu tahmin etmek için denetimli bir makine öğrenimi modeli kullanacağız. Etiketi önceden belirlenmiş yorumlara dayanarak yeni bir yorumdaki duygunun pozitif mi yoksa negatif mi olduğunu tahmin etmek istediğimizden, yine bir sınıflandırma problemiyle karşı karşıyayız. Yine, lojistik regresyon algoritmasını kullanalım ve model doğruluğunu ölçelim:

Accuracy score: 0.754

Confusion matrix:
[[37.62772101 13.23856064]
[11.32829853 37.80541981]]

Modelin, pozitif olan tüm yorumların %11’ini negatif, negatif olanların ise %13’ünü pozitif olarak etiketlediğini görüyoruz. Model doğruluğunu artırmak için ileriye dönük olası yollar olarak, durak kelimeleri ("about", "will", "you" gibi çok sık geçen ve bilgi değeri düşük kelimeler) hariç tutmayı ve sözlüğün boyutunu artırmayı düşünebiliriz.

BOW yöntemini uyguladığımızda, veri çerçevemizde yüzlerce hatta binlerce yeni özellik elde edebiliriz. Bu da aşırı karmaşık bir model oluşturulmasına yol açabilir: aşırı uyumlu, gereksiz yere fazla özellik ve parametreye sahip. Bunu düzeltmenin bir yolu, modelin fonksiyonunu kısıtlayan düzenlileştirme kullanmaktır. Burada ayarlanacak parametre, düzenlileştirme gücünü temsil eden C’dir. Bu parametrenin 100 ve 0.1 olmak üzere 2 değerini test edelim ve hangisinin test verisi üzerinde en iyi performansı verdiğine bakalım:

lr_1 = LogisticRegression(C=100)
lr_1.fit(X_train, y_train)
predictions_1 = lr_1.predict(X_test)

lr_2 = LogisticRegression(C=0.1)
lr_2.fit(X_train, y_train)
predictions_2 = lr_2.predict(X_test)

print(f'Accuracy score, lr_1 model: {round(accuracy_score(y_test, predictions_1), 3)}\n'
      f'Accuracy score, lr_2 model: {round(accuracy_score(y_test, predictions_2), 3)}\n\n'
      f'Confusion matrix for lr_1 model, %:\n{confusion_matrix(y_test, predictions_1)/len(y_test)*100}\n\n'
      f'Confusion matrix for lr_2 model, %:\n{confusion_matrix(y_test, predictions_2)/len(y_test)*100}')
Accuracy score, lr_1 model: 0.753
Accuracy score, lr_2 model: 0.756

Confusion matrix for lr_1 model, %:
[[37.53887161 13.32741004]
[11.32829853 37.80541981]]

Confusion matrix for lr_2 model, %:
[[37.67214571 13.19413594]
[11.19502443 37.93869391]]

Seçilen C parametresi değerleri kullanıldığında model doğruluğundaki fark önemsizdir. Bu parametrenin daha fazla değeriyle denemeler yaparak modeli daha fazla iyileştirebilecek bir değer bulunabilir. Ancak burada yalnızca 200 yeni özelliğimiz var; dolayısıyla modelimiz o kadar karmaşık değil ve düzenlileştirme adımı bizim durumumuzda gerçekten gerekli değil.

predict işleviyle 0 veya 1 etiketlerini tahmin etmek yerine, predict_proba ile duygu olasılığını tahmin etmek mümkündür. Burada, bu metriklerin yalnızca sınıflarla çalıştığı için, tahmin edilen olasılıklara doğrudan doğruluk skoru veya karışıklık matrisi uygulayamayacağımızı akılda tutmalıyız. Bu nedenle, bunları daha sonra sınıflar olarak kodlamamız gerekir. Varsayılan olarak, 0.5’ten büyük veya eşit olasılık 1 sınıfına, aksi takdirde 0 sınıfına çevrilir.

lr = LogisticRegression()
lr.fit(X_train, y_train)

# Predicting the probability of the 0 class
predictions_prob_0 = lr.predict_proba(X_test)[:, 0]

# Predicting the probability of the 1 class
predictions_prob_1 = lr.predict_proba(X_test)[:, 1]

print(f'First 10 predicted probabilities of class 0: {predictions_prob_0[:10].round(3)}\n'
      f'First 10 predicted probabilities of class 1: {predictions_prob_1[:10].round(3)}')
First 10 predicted probabilities of class 0: [0.246 0.143 0.123 0.708 0.001 0.828 0.204 0.531 0.121 0.515]
First 10 predicted probabilities of class 1: [0.754 0.857 0.877 0.292 0.999 0.172 0.796 0.469 0.879 0.485]

Sonuç 

Daha ayrıntılı bir duygu analizi yapmak için veri kümemize uygulayabileceğimiz başka birçok yararlı yaklaşım vardır:

  • bağlamı korumak için yalnızca tek kelimeler yerine n-gramlar (kelime kombinasyonları) kullanmak,
  • durak kelimeleri hariç tutmak,
  • sözlük boyutunu üst veya alt frekans değerlerine göre sınırlamak,
  • her yorumun uzunluğunu veya noktalama işaretlerinin sayısını tanımlayan sayısal ek özellikler oluşturmak (ikincisi bazen duygunun büyüklüğüyle ilişkili olabilir),
  • sayıları, bazı karakterleri, belirli uzunluktaki kelimeleri hariç tutmak ya da daha karmaşık kelime kalıplarını dikkate almak,
  • kök bulma ve gövdeleme (stemming ve lemmatization), yani kelimeleri köklerine indirgeme uygulamak,
  • sözlük oluşturmak için BOW yerine daha sofistike yaklaşımlar kullanmak; örneğin, bir kelimenin bir yorumda diğer yorumlara göre ne sıklıkta geçtiğini dikkate alan TfIdf (term frequency–inverse document frequency).
  • TextBlob, SentiWordNet, VADER (Valence Aware Dictionary and Sentiment Reasoner) gibi duygu analizi için tasarlanmış bazı uzmanlaşmış kütüphaneleri kullanmak.

Bu ve diğer yararlı teknikleri keşfetmekle ilgileniyorsanız, Python ile Duygu Analizi kursuna göz atın.

Konular
Veri Bilimi
Makine Öğrenimi
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Devamını GörDevamını Gör