Get In Touch
Levent, İstanbul
mail@oguzerdogan.com
Work Inquiries
work@oguzerdogan.com

Level Based Persona Tanımlama

Merhaba, bu yazımda makine öğrenmesi kullanmadan sadece pandas fonksiyonlarını kullanarak, basit kural tabanlı bir segmentasyon çalışması yapacağız.

Elimizdeki kullanıcı bilgileri ve kullanıcıların yapmış oldukları satın alma işlemlerinin bilgilerini kullanarak, yeni müşteri tanımlamaları (level based persona) oluşturacağız.

Ardından oluşturduğumuz bu müşteri tanımları ile, yeni gelececek bir kişinin hangi segmentte olduğunu tahmin etmeye çalışacağız.

Çalışmanın kodlarına ve verisetine buradan ulaşabilirsiniz.

Yazı içeriğinde şunlarla karşılaşacaksınız:

  • Persona kavramını düşünme
  • Levellara göre yeni müşteri tanımları yapabilme
  • Yeni gelen bir müşteriyi oluşturulan segmentlere göre sınıflandırma.

Python tarafında ele alacaklarımız ise:

  • Kullanıcı id’leri ortak olan ve çoklanmış verilerden oluşan iki farklı tabloda kontrol işlemleri ve bu tabloları birleştirme
  • Groupby ile aggregation işlemleri
  • Hiyerarşik index yapısından kurtulma
  • Qcut fonksiyonu ile segmentasyon yapma

Hazırsanız projeye geçelim.

Proje Aşamaları

Gerekli kütüphanelerin yüklenmesi

Verisetinin okutulması.

Veriseti bilgisi:

Kullanıcıların özelliklerini ve işlem bilgilerini gösteren iki farklı tablo mevcuttur.

users.csv tablosu kullanıcıların karakteristik özelliklerini gösterirken

purchases.csv tablosu kullanıcıların satın alma bilgilerini barındırmaktadır.

Her bir kullanıcının kendisine özel (unique) bir kullanıcı numarası (uid) bulunmaktadır.

Her iki tablonun birleştirilmesi işlemi uid numarası ile yapılabilmektedir.

Değişken tanımları:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e758a58-e670-41a6-83ab-81dba79ca9ae/Untitled.png

Görüldüğü gibi kullanıcıların ülke, cihaz, yaş bilgileri ve hangi tarihte hangi fiyattan ürün satın alımını yaptığını gösteren çeşitli değişkenlerimiz var.

Projedeki amacımız buradaki tekil kullanıcıların özelliklerine göre gruplandırmalar yapmak ve sonrasında bu gruplardan segmentler tanımlamak.

Kullanıcı bilgileri ve satın alımlarının olduğu iki tablo olduğuna göre başlangıçta şu soruyu sormak iyi olacaktır.

Her kullanıcı alışveriş yapmış mıdır?

Verisetinde bir kullanıcı birden fazla satın alım yapmış olabilir mi?

Hiç satın alım işlemi yapmamış kullanıcılar olabilir mi?

Verisetini inceleyelim.

Boyut bilgilerinden anladığımız kadarıyla bazı kullanıcıların satın alım işlemi yapmadığını görebiliyoruz.

İki verisetine de bakmak istersek:

Gördüğümüz üzere iki tabloda da kullanıclara uid değişkeni içerisinde id’ler verilmiş ve iki tabloyu uid numaraları ile birleştirmemiz mümkün.

Fakat bunları yapmadan önce birkaç kontrol yapmak faydalı olacaktır.

Kullanıcı id’si üzerinde çoklanmış veriler var mı ?

Her kullanıcının satın alım yapmadığını biliyoruz, peki kullanıcılar birden fazla satın alım yapmış mı?

Belirttiğimiz değişkenin verisetinde unique (tekil) olup olmadığını bize gösteren ufak bir fonksiyon yazalım.

Users tablosundaki users id’ler tekil mi?

Gördüğümüz gibi her bir kullanıcıya ait bir tane id var.

Peki kullanıcılar birden fazla satın alma eylemi gerçekleştirdi mi?

Purchases tablosundan bunu kontrol edelim.

Gördüğümüz gibi purchases tablosunda sadece 1322 tane tekil id var.

Yani sadece 1322 kullanıcı satın alma işlemi yapmış.

Bu kullanıcılar toplamda 9006 kez satın alma eylemi gerçekleştirmiş.

Peki ya en çok alışveriş yapan kullanıcıların işlem sayıları hangi seviyede?

67972857 ve 41217161 id’li kullanıcılar toplamda 28 kez. alışveriş yapmışlar.

Artık gözlemlediğimiz üzere elimizde birbirine bağlı 2 tablo var ve bu tablolardan birisi kullanıcı bilgilerini içerirken diğer tablo kullanıcının satın alma geçmişini saklamakta.

Bu iki tabloyu birleştirmek farklı açılardan mümkün. (leftjoin, innerjoin)

Projede nihai olarak her bir tekil kullanıcının özellikleri ile birlikte yeni kullanıcı grupları tanımlayacağımız için kullanıcı işlemlerini tek bir satırda göstermemiz daha iyi olacaktır.

Bunun için inner join kullanıyorum.

Inner join: Her iki veri setinde de ortak olan değişken üzerinden sadece iki tabloda da mevcut olan gözlemleri birleştirir.

Evet iki tablomuzu da birleştirdik.

Birden fazla işlem yapmış kullanıcılar şu anda çoklanmış şekilde bu verisetinde ve bu işlem geçmişlerini tek satırda göstermemiz gerekiyor. Bunun için her alışverişte yaptıkları harcamaların toplamını alabiliriz.

Ülke, cihaz, cinsiyet ve yaş kırılımında toplam satın alımları merak ediyorum.

Görüldüğü üzere en çok satın alım miktarları Amerikadaki android kullanan yaşındaki Erkeklerde.

Burada şöyle bir sorunla karşı karşıyayız. Yaş değişkeni sayısal bir değişken olduğu için özellikleri kategorize etmekte zorlanıyoruz.

Yaş değişkenini kategorik bir şekilde gruplara ayırabilirsek, daha genel bir bilgiye sahip olabiliriz.

Bunu yapmadan önce hiyerarşik index yapısından kurtulalım. (price değişkeni bir üst indexte)

Yaş değişkenini sınıflara ayırmadan önce dağılımına bir bakalım.

Kullanıcılarımızı yaşlarına göre kategorik şekilde gösterebilmek için pandas’tan qcut fonksiyonunu kullanacağım.

Qcut fonksiyonunu segmentasyon çalışmalarında çok sık kullanmaktayız. Mantığı çok basit bir şekilde değişkenin değerlerini küçükten büyüğe doğru sıralayarak belirtilen kartillere göre veriyi kategorilere ayırıyor.

0-18, 19-23, 24-30, 41 ve üstü şeklinde yeni yaş kategorileri oluşturuyorum.

Şimdi daha genel bir kitle hakkında bilgi sahibi olabiliyoruz.

Peki kişilerin tüm bu özellikleri dahil ederek onları bir grup altında etiketlesek?

Yani belirli bir ülkedeki, belirli bir cihazı kullanan, farklı yaş aralıklarındaki farklı cinsiyetlerin oluşturduğu gruplar kursak, ve bu grupların toplam harcadıkları miktarları gözlemlemek istersek?

Level Based Persona Tanımlama

Artık bir kişinin her bir özelliğinin dahil olduğu bir etikete sahibiz. Nedir bu etiket?

USA_AND_M_0_18 Grubu

Amerikadaki Android ürün kullanan 0-18 yaş arasındaki Erkek kullanıcılarımız. Ve toplam satın alımları 61550.

İkinci sırada ise BRA_AND_M_19_23 Grubu

Brazilyadaki Android cihaz kullanan 19-23 yaş arasındaki Erkek kullanıcılarımız. Toplam satın alımları 45392

Tüm kullanıcı özelliklerini bir arada toplayarak onları bir persona kalıbına sokabildik. Bu grupları da toplam satın alım sayılarına göre 4 ayrı segmente ayırmak istiyorum.

Segmentlerimin özet istatistiklerine bakmak istersek

Artık kullanıcılarımızın özelliklerine göre onları segmente edip harcama tutarlarını daha genel bir şekilde görebiliyor ve daha da güzeli hiç elimizde olmayan yeni bir müşteri personası için tahminde bulunabiliyoruz.

Nasıl mı oluyor?

Örneğin Türkiyede iOS kullanan 42 yaşındaki bir kadın hangi segmentte olacak?

Görüldüğü gibi kendileri D segmentimizde yer alıyor.

Peki böyle birisi verisetimizde var mıydı?

Bu çalışmada kullanıcılarımızın satın alım işlemlerini basit kategorilere ayırarak sadece pandas ile manuel bir makine öğrenmesi sınıflandırma problemi yaptık.

Author avatar
Oğuz
https://www.oguzerdogan.com
Merhaba ben Oğuz. Kişisel web siteme hoşgeldin. Burada Veri Bilimi & Makine Öğrenmesi çalışmalarımı paylaşıyorum.

Post a comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir