Bir e-ticaret işletmesindeki en yaygın zorluklardan biri, iyi performans gösteren bir ürün tavsiyesi ve kategorizasyon modeli oluşturmaktır. Kullanıcılara benzer ürünleri önermek için bir ürün tavsiyecisi kullanılır, böylece kullanıcı başına platformda harcanan toplam zaman ve para artar. Ayrıca, sınıflandırılmış web sitelerinde olduğu gibi, özellikle içeriğin çoğunun kullanıcılar tarafından oluşturulduğu bu platformlarda yanlış kategorize edilmiş ürünler olabileceğinden, ürünleri doğru bir şekilde kategorize etmek için bir modele ihtiyaç vardır. Bu ürünleri yakalamak ve platformdaki genel kullanıcı deneyimini geliştirmek için onları doğru kategorilerine geri yerleştirmek için bir ürün kategorizasyon modeli kullanılır.
Bu makale 2 ana bölümden oluşmaktadır. İlk bölümde e-ticaret ürün tavsiye sisteminin nasıl oluşturulacağından bahsedeceğiz ve bazı uygulamalı kodlama çalışmaları ile ürün kategorizasyonu yapacağız. İkinci bölümde, Layer adlı bir MLOps platformu yardımıyla bu projenin sadece birkaç adımda nasıl operasyonel hale getirileceğini tartışacağız .
Tüm e-ticaret platformlarının, temelde 3 sütundan oluşan basit bir tablo olan kullanıcıların tıklama verilerini topladığını düşünüyorum: session_id, product_id ve timestamp. Aslında bu tablo, işletmeniz için de bu makalede açıklanan böyle bir ürün tavsiye modelini oluşturmak için ihtiyacınız olan tek veridir. Bu eğitim boyunca, aşağıdaki bağlantıyı bulabileceğiniz bir e-ticaret mağazasının tıklama akışı verileri olan genel bir Kaggle veri kümesini ( CC0: Public Domain ) kullanacağız. [1]
Word2Vec algoritması, ürün yerleştirmeleri üretmek için bu metodolojinin kalbinde yer alır. Word2Vec çoğunlukla NLP ve metin bağlamında kullanılır. Bu bağlamda Word2Vec'i kullanan bir benzetme var. Bir ürün tek bir kelime olarak ele alınacak ve bir dizi ürün görünümü (oturum) bir cümle olarak değerlendirilecektir. Word2Vec algoritmasının çıktıları, ürünlerin sayısal temsili vektörleri olacaktır.
Bir sonraki adımda, bu ürün vektörleri, rastgele sayıda ürün kümesi oluşturmak için girdiler olarak bir K-Means algoritmasına beslenir. Bu kümeler, benzer ürünlerin gruplandırılmasını (kategorizasyonunu) temsil eder.
Son adımda ise belirli bir ürünün ait olduğu kümeden rastgele seçim yaparak bazı ürün önerileri üreteceğiz.
Bu makale daha çok bazı kodlama örnekleri içeren bir öğretici gibidir. Metodoloji hakkında daha fazla bilgi almak ve böyle bir projenin uzun hikayesini öğrenmek için bu makaleyi de okumanızı şiddetle tavsiye ederiz.
Adım I: csv dosyasını bir pandas veri çerçevesine yükleyin
2. Adım: Tıklama verilerini ürün görünümlerinin sıralarına dönüştürün
Adım III: Word2Vec algoritmasını kullanarak ürün vektörleri (gömmeler) oluşturun
Adım IV: K-Means modelini ürün vektörlerine sığdırın (gömmeler)
Adım V: Kümeleri veri çerçevesi olarak kaydedin
Adım VI: Belirli bir ürün için benzer ürün önerileri alın
Katman Kurulumu ve Oturum Açma
Katman Veri Kümesi Dekoratörü
Katman Modeli Dekoratörü
Katman Çalıştırma Ortamı Modları
Katmanla Tümleşik Tam Dizüstü Bilgisayar
csv dosyasını bulunduğu yerden okuyan ve bir Pandas DataFrame döndüren raw_session_based_clickstream_data adlı basit bir işlev tanımlayın .
raw_clickstream = raw_session_based_clickstream_data() raw_clickstream.head(5)Sample Data Records (Image by Author)
Önceki işlevin çıktısından raw_clickstream veri çerçevesini alan ve bazı sütunları yeniden adlandırma ve yalnızca tek bir ürün görünümünün olduğu oturumları bırakma gibi bazı veri temizleme uygulayan create_sequential_products adlı bir işlev tanımlayın . Bundan sonra, verileri session_id sütununa göre gruplandırır ve oturum başına ürün listeleri oluşturur. Ürün görünümlerinin sırasının kronolojik sırada olması gerektiğinden, ürün görünümlerini oturuma göre gruplandırırken verilerde sipariş sütununu kullanmak önemlidir . Verilerinizde yalnızca ürün görünümlerinin zaman damgaları varsa, önce zaman damgası sütununu kullanarak böyle ayrı bir sipariş sütunu oluşturmalısınız.
Ayrıca, ürün görüntüleme dizilerinden herhangi bir ardışık yinelenen ürünü bırakan remove_consec_duplicates adlı bir yardımcı işlev de vardır. Ürün yerleştirmelerini oluşturmak için bir sonraki bölümde Word2Vec algoritmasını kullanacağımız için bu özellikle önemlidir. Verilerinizde algoritmayı bozabilecek birçok ardışık yinelenen ürün görüntülemeniz olması çok olasıdır.
session_based_product_sequences = generate_sequential_products() session_based_product_sequences.head(5)Sample Data Records (Image by Author)
Önceki işlevin çıktısından session_based_product_sequences veri çerçevesini alan ve parametre pencere boyutunu 5'e ve yerleştirme boyutunu 10'a ayarlayarak bir Gensim'in Word2vec modelini eğiten create_product_embeddings adlı bir işlev tanımlayın . Bu işlev, ilk sütunun ürün kimliği olduğu ve diğer sütun, Word2Vec modelinden döndürülen temsili 10 boyutlu sayısal vektörüdür.
product_ids_and_vectors = create_product_embeddings() product_ids_and_vectors.head(5)Sample Data Records (Image by Author)
Önceki adımda oluşturulan ürün vektörleri veri çerçevesi product_id_ve_vektörlerini kullanarak bir k-araç modelini eğiten fit_kmeans adlı bir işlev tanımlayın . Aşağıdaki kod parçacığında, küme sayısını rastgele bir sayı 10 olarak belirledik. Ancak, platformunuzda bulunması gereken toplam kategori sayısına göre küme sayısına karar verebilirsiniz.
Ayrıca diğer iki yardımcı işlevin sonucu olarak iki farklı grafik oluşturduk: plot_cluster_distribution ve plot_cluster_scatter. İlki, bir çubuk grafikte kümeler boyunca üye sayısının dağılımını gösteren bir görselleştirme oluşturur ve ikincisi, kümelerin 2B uzayda nasıl oluşturulduğunu gösteren ve ağırlık merkezlerini siyah bir nokta ile işaretleyen bir dağılım grafiğidir.
model = fit_kmeans()Check out how these plots look on Layer: https://app.layer.ai/layer/Ecommerce_Recommendation_System/models/clustering_model#Product-Distribution-over-Clusters (Image by Author)
Her kümenin üye listesini depolayan bir veri çerçevesi oluşturan save_final_product_clusters adlı bir işlev tanımlayın . Bu işlev , önceki işlevin modelini ve create_product_embeddings işlevinin çıktısındaki product_ids_and_vectors veri çerçevesini kullanır. Daha önce küme sayısını 10 olarak belirlediğimiz için bizim durumumuzda veri setinde toplam 10 satır olacaktır. Zaten bildiğimiz gibi, bu durumda bir küme üyesi bir ürün kimliğidir.
cluster_members_df = save_final_product_clusters() cluster_members_df.head(10)Sample Data Records (Image by Author)
Şimdi, belirli bir ürün kimliği için bazı benzer ürün önerileri getirmek için bir kod bloğu yazalım: "A13".
Bunun için öncelikle product_ids_and_vectors veri çerçevesinden bu ürünün temsili sayısal vektörünü almamız ve atanmış küme numarasına sahip olması için modele vermemiz gerekiyor. Ardından, "A13" ürününün ait olduğu kümenin üye listesini getireceğiz. Son adımda, bu kümeden rastgele 5 benzer ürün seçeceğiz ve işte bu kadar!
Çıktı şöyle görünecektir:
5 Similar Product Recommendations for A13: ['C17', 'P60', 'C44', 'P56', 'A6']
Layer , önceden tanımlanmış bazı fonksiyon dekoratörleriyle birlikte gelen ortak bir makine öğrenme platformudur. Bir kullanıcı olarak, tek yapmanız gereken, işlevinizin dönüş veri türüne bağlı olarak Python işlevlerinizi bir Katman dekoratörleri ( veri kümesi ve model dekoratörleri) ile sarmak. Örneğin, işleviniz bir veri kümesi döndürürse ve Katmanın onu izlemesini istiyorsanız, bunu Katman veri kümesi dekoratörü ile sarın ve Katman otomatik olarak veri kümenizde sürüm oluşturmaya başlar. Modeller için de prosedür aynıdır. İşleviniz bir ML modeli döndürüyorsa, onu Layer model dekoratörü ile sarın ve Layer, aynı not defterini her çalıştırdığınızda otomatik olarak modelinizde versiyonlama yapmaya başlayacaktır.
Sadece birkaç satır kodla Layer'ı kurarak ve oturum açarak başlayalım. Ardından, 'layer.init(your_project_name)' kullanarak projenizi Layer üzerinde başlatın .
!pip install layer import layer from layer.decorators import dataset, model layer.login() layer.init("Ecommerce_Recommendation_System")
Bu öğreticide ilk işlevinizi raw_session_based_clickstream_data Katman veri kümesi dekoratörü '@dataset(dataset_name)]' ile saralım ve Katman veri kümenize bir ad verelim: "raw_session_based_clickstream_data". Aşağıdaki kod parçacığında gösterildiği gibi ' layer.log()' kullanarak veri kümesi açıklaması gibi diğer veri türlerini de veri kümenizle birlikte kaydedebilirsiniz.
Bundan sonra Layer, fonksiyondan döndürülen veri kümenizi izleyecek, veri kümenizle birlikte diğer veri türlerini günlüğe kaydedecek ve otomatik olarak sürümlendirecektir. Bu, bu işlevi her çalıştırdığınızda, veri kümenizin yeni bir sürümünü oluşturacağı anlamına gelir. Bu şekilde Layer, aynı veri setinin tüm yolculuğunu aşağıdaki resimde gösterildiği gibi Layer Web UI üzerinde görmenizi sağlayacaktır.
Solda veri seti sürümlerinin bir listesini ve sayfanın sağ tarafında bazı veri profili bilgilerini görebilirsiniz. "Günlüğe kaydedilen veriler" adlı sekmenin altındaki veri kümesiyle birlikte günlüğe kaydedilen diğer tüm verileri göreceksiniz.
Şimdi aynı işlemi modeller için de yapalım. Bu sefer, model işlevinizi: fit_kmeans() Katman modeli dekoratörü '@model(model_adı)]' ile sarmalı ve Katman modelinize bir ad vermelisiniz: “clustering_model” . Aşağıdaki kod parçacığında gösterildiği gibi, ' layer.log()' kullanarak bazı grafikler gibi modelinizle birlikte diğer veri türlerini de günlüğe kaydedebilirsiniz .
Önceki bölümün IV. Adımındaki kod bloğu ile aşağıdaki kod bloğu arasındaki tek fark, sadece 3 ekstra Katmana özel satırdır.
Şu andan itibaren Layer, diğer tüm verileri günlüğe kaydetme ile birlikte modelinizi izleyecek ve sürümlendirecektir. Modelinizin farklı versiyonlarını karşılaştırmanıza, arıza durumunda herhangi bir önceki model versiyonuna dönüş yapmanıza ve model performansınızı sürekli izlemenize olanak sağlar. İşte Layer WebUI'deki bir model sayfasından alınan bir ekran görüntüsü.
Katmanın 2 çalışma ortamı modu vardır: yerel ve uzak.
Yerel Mod: Yerel modda, fonksiyonlarınızı her zamanki gibi istediğiniz sırayla çağıracaksınız ve kod kendi hesaplama gücünüzü kullanarak yerel bilgisayarınızda çalışacaktır. Bu mod, çalışma boyunca oluşturulan veri kümeleri veya modeller gibi tüm verileri Katmanın uzak ana bilgisayarına kaydetmeye devam eder.
# LAYER LOCAL MODE raw_session_based_clickstream_data() generate_sequential_products() create_product_embeddings() fit_kmeans() save_final_product_clusters()
# LAYER REMOTE MODE layer.run([raw_session_based_clickstream_data, generate_sequential_products, create_product_embeddings, fit_kmeans, save_final_product_clusters],debug=True)
#MODEL DECORATOR WITH DEPENDENCIES @model("clustering_model",dependencies=[Dataset("product_ids_and_vectors")]) #DATASET DECORATOR WITH DEPENDENCIES @dataset("final_product_clusters", dependencies=[Model("clustering_model"), Dataset("product_ids_and_vectors")])
Tüm kod bloklarını tek bir python not defterinde bir araya getirelim. Katman entegrasyonuna sahip e-ticaret ürün öneri sistemi not defterinin tam sürümü:
Aşağıdaki bağlantıya tıklayarak bu projenin Layer'da nasıl göründüğünü de kontrol edebilirsiniz:
Okuduğunuz için teşekkürler! Geri bildiriminiz değerlidir. Lütfen düşüncelerinizi aşağıdaki yorum bölümünde bizimle paylaşın.
Referanslar:
"Eğitim, dünyayı değiştirmek için kullanabileceğiniz en güçlü silahtır." — Nelson Mandela UNICEF'e göre, dünyadaki her beş okula gitmeyen çocuktan biri Nijerya'da, bu da Nijerya'daki eğitim durumu hakkında bir şeyler söylüyor.
Doktoraların, akademisyenlerin ve bilgili ekonomistlerin bir odada oturup erkek iç çamaşırları hakkında konuştuklarını hayal edin. Kulağa garip geliyor? Federal Rezerv'in eski Başkanı Alan Greenspan öyle düşünmüyor.
Burada İstanbul'da bir Pazar akşamıydı ve bir şehir sakini olan Shehab, akşam saat 21.00'de bir atıştırma çağrısı aldı. Mutfağa gitti, onun için ne olduğunu bulmak için.
Dünya nüfusunun %1'inin işaret dili kullanarak iletişim kurduğu tahmin ediliyor, ancak hepsini bir odaya koyarsanız, çok azı birbirini anlar. Bunun nedeni, yaklaşık 300 farklı türde işaret dili bulunmasıdır, oysa insanlar genellikle en fazla bir işaret dili bilir: kendi ulusal işaret dili.
Geçtiğimiz birkaç ay içinde 0xIDENTITIES Ekibi güzel bir şey yarattı ve Ekip içindeki hepimiz bunu hemen kabul ediyoruz. Belki sayıca değil, ama başlangıçta ana hatlarıyla belirttiğimiz hedeflere ulaşmak için yola çıkmamız açısından büyümemize tanık olan çok sayıda kendini adamış topluluk üyemiz var.
İş hakkında konuştuğumuzda ürünler veya hizmetler birbirinden ayrılamaz. Çünkü iş kurmanın temel nedeni müşterilere mal veya hizmet satmaktır.