← Back to list

Data Preparation (Bölüm 4)

Herkese yeniden merhabalar. Serimize kaldığımız yerden devam ediyoruz.

Hayrunisa ipek · 2026-01-29 20:40 · 53 claps · 2.9 min read
#veri-bilimi #crm #rfm #rfm-analysis #data-science
Open on Medium ↗
Wiki topics: ML · Machine Learning CRM · Email & CRM 🔬 · Science · General 🛠️ · Crafts & DIY

Data Preparation (Bölüm 4)

Herkese yeniden merhabalar. Serimize kaldığımız yerden devam ediyoruz.

Eğer bu yazıya yeni denk geldiyseniz; konuya tam hakim olabilmek adına serinin ilk bölümlerine göz atmanızı tavsiye ederim.

Hatırlarsanız bir önceki bölümde veri setimizi genel hatlarıyla incelemiş ve yapısını anlamaya çalışmıştık. O inceleme sırasında karşımıza bazı düzeltilmesi gereken noktalar çıkmıştı: Negatif (iade) değerler ve eksik (boş) veriler…

Veriyi tanıdığımıza göre artık uygulama aşamasına geçebiliriz. Şimdi bu eksik ve hatalı kısımları düzenleyerek veri setimizi RFM analizine hazır hale getireceğiz.

Adım 1: Eksik Verileri Temizleme

İlk işlemimiz, veri setindeki boş değerlerden (özellikle Customer ID kısmından) kurtulmak olacak. Peki neden?

Çünkü RFM analizi, tamamen “Müşteri Odaklı” bir analizdir. Analiz yaparken şu soruyu sormamız gerekir: “Kimliğini bilmediğimiz (Customer ID’si olmayan) bir müşterinin sadakatini ölçebilir veya ona özel bir strateji geliştirebilir miyiz?” Cevap net: Hayır.

Bu yüzden, klasik bir RFM analizi yaparken kimliği belirsiz kayıtlar üzerinden işlem yapmak mantıklı olmayacaktır.

Ufak Bir Not: Elbette veri biliminde tek bir doğru yol yoktur. Eğer veri setimizde boş değerlerin oranı çok yüksek olsaydı veya proje amacımız farklı olsaydı, bu verileri silmek yerine farklı istatistiksel yöntemlerle doldurma yoluna gidebilirdik. Ancak şu anki senaryomuzda en sağlıklı yöntem, bu eksik kayıtları analiz dışı bırakmaktır.

O zaman gelin, temizlik işlemine başlayalım!

df.isnull().sum()#boş değerlere baktık
df.dropna(inplace=True) #kalıcı şekilde sildik

Şimdi veri setimizin transpozunu alalım. Bakalım ve yorumlayalım dağılımlarda sorun var mı aykırılık ve ya çarpıklık var mı?

df.describe().T #transpose 

kodun çıktısı

kodun çıktısı

kodun çıktısı — 2

kodun çıktısı — 2

Veri setinin genel sayısal özetine baktığımızda (describe tablosu), karşımıza çıkan rakamları doğru okumak analiz süreci için oldukça önemlidir.

Burada dikkatimizi çeken ve yorumlamamız gereken birkaç temel nokta var:

1. Negatif Değerler Tabloda “Minimum” değerlere baktığımızda eksi (-) değerler görüyoruz. Giriş kısmında da bahsettiğimiz gibi; bunlar iadeleri veya iptal edilen işlemleri gösteriyor. Analize başlamadan önce bu değerleri düzenlememiz gerekecek.

2. Ortalama ve Standart Sapma İlişkisi (Dengesizlik Var mı?) Veriyi yorumlarken bakmamız gereken en önemli detaylardan biri, Standart Sapma ile Ortalama arasındaki ilişkidir.

  • Eğer standart sapma, ortalamadan belirgin şekilde yüksekse; orada bir çeşitlilik veya dağılım farkı var demektir.

Verimize dönüp baktığımızda:

  • Price (Fiyat): Standart sapması ortalamanın üzerinde görünüyor. Bu durum, ürün fiyatlarının çok çeşitli olduğunu; yani mağazamızda çok ucuz ürünlerin de, pahalı ürünlerin de bulunduğunu gösterir.
  • Quantity (Adet): Burada da standart sapma, ortalamanın oldukça üzerinde. İşte bu bize müşteri davranışları hakkında harika bir ipucu veriyor: Müşterilerimiz arasında standart bir alım alışkanlığı yok. Bazı müşteriler 4–5 adet (perakende) ürün alırken, bazıları binlerce adet (toptan) ürün satın alıyor.

💡 Önemli Not: Bu yorumları yapabilmek, kod yazmaktan çok daha kritiktir. Çünkü veri biliminde veriyi nasıl düzenleyeceğimize ve hangi işlemleri uygulayacağımıza, işte bu tablodan çıkardığımız yorumlara göre karar veririz.

df = df[(df['Quantity'] > 0)] #satılmayan ürünleri baz almıyoruz
#fatura numarasını string değere çeviriyoruz
df["Invoice"] = df["Invoice"].astype(str)
#Fatura numarasında 'C' yazan iadeleri veriden kaldırıyoruz(iadeler)
df = df[~df["Invoice"].str.contains("C", na=False)]

Adım 2: İadeleri ve Negatif Değerleri Temizleme

Fatura sistemlerinin çalışma mantığı gereği; satışlar sisteme pozitif (+) değerle kaydedilirken, müşteriden geri alınan ürünler (İade Faturaları veya Gider Pusulaları) negatif (-) olarak yansır. Eğer incelediğimiz dönemde, bir ürüne ait iade işlemi satıştan fazlaysa, toplam adedi eksi olarak görebiliriz.

Peki bunu nasıl düzelteceğiz? Veriyi incelediğimizde, iade edilen faturaların numaralarının başında “C” (Cancellation/İptal) harfi olduğunu fark ediyoruz. İlk iş olarak, faturasında “C” kodu bulunan bu iade işlemlerini veri setimizden çıkarıyoruz.

Buna ek olarak, “Quantity” (Adet) değerinin 0'dan büyük olduğu işlemleri filtreliyoruz. Bunun sebebi çok basit: Bizim bir müşteriyi analiz edebilmemiz için, o müşterinin en az 1 tane bile olsa ürün satın almış olması gerekir. İadeler veya sıfır değerli işlemler “satın alma” davranışı olmadığı için bu kayıtları eliyoruz.

boş değerleri kaldırdık

boş değerleri kaldırdık

Kontrol sağladık(negatif değerler kalmamış)

Kontrol sağladık(negatif değerler kalmamış)

Bir sonraki bölümde RFM metriklerini hesaplama konusuna giriş yapacağız. Sevgiler..❤


메타데이터
post_id
a574dbbcadd3
slug
data-preparation-bölüm-4-a574dbbcadd3
url
https://medium.com/@hayrunisaipek/data-preparation-b%C3%B6l%C3%BCm-4-a574dbbcadd3
canonical_url
https://medium.com/@hayrunisaipek/data-preparation-b%C3%B6l%C3%BCm-4-a574dbbcadd3
author_url
https://medium.com/@hayrunisaipek
status
ok
fetched_at
2026-06-13 07:35:29