Denetimli Öğrenme Algoritmalarının Eğitilmesi — Kıyaslanması ve Değerlendirilmesi

Oğuzhan Arı
6 min readJun 27, 2022

--

Merhaba! Bu sefer gerçekten uzun bir aradan sonra tekrar merhaba! Bu arada bir adet yüksek lisans tezi yazdım ve bunu yazarken denetimli öğrenme algoritmalarını bir amaç üzerine kıyasladım. Burada, bu tarz bir kıyaslama aracına veya direkt olarak “algoritmalarını hangi açıdan kıyaslayabilirim” gibi bir soruya cevap arayanlar için “işte size bir cevap da benden!”

Öncelikle, araştırma sorumuzu ve bu soru için neler kullandığımızı, neler kullanmadığımızı ve neden böyle bir yaklaşım izlediğimizi belirtelim.

Araştırma sorumuz;

“Çevrimiçi alışveriş platformlarında paylaşılan yeni bir tüketici yorum ve değerlendirmesinin faydalılık düzeyi, diğer tüketicilerinin algıları olmaksızın makine öğrenme algoritmaları aracılığıyla tahmin edilebilir mi?”

Bu soruyu daha iyi anlayabilmek için bazı sorular ve cevapları;

Soru: Çevrimiçi alışveriş platformu ne demek?

Cevap: Hepsiburada, trendyol, amazon ve benzeri platformlar çevrimiçi alışveriş platformu olarak ifade edilebilir.

Soru: Faydalı tüketici değerlendirmesi ne demek?

Cevap: Faydalı tüketici değerlendirmesi, platformdan platforma değişmekle birlikte, diğer tüketiciler tarafından “faydalı” olarak işaretlenen değerlendirmeler olarak tanımlanabilir. Bu değerlendirmelerin, diğer tüketiciler tarafından satınalma süreçlerine faydalı olduğu, yine diğer tüketiciler tarafından ifade edilmiştir.

Soru: Faydalılık düzeyi ne demek?

Cevap: Platformdan platforma değişmekle birlikte, diğer tüketiciler tarafından en fazla faydalı olarak işaretlenen değerlendirme, en faydalı tüketici değerlendirmesi olarak ifade edilebilir.

Soru: Diğer tüketicilerin algıları ne demek?

Cevap: Tüketici değerlendirmesinin faydalı olarak işaretlenmesi, otomatik olarak gerçekleşmemektedir. Bu işaretlenme süreci, bir diğer tüketicinin değerlendirmeyi inceleyerek faydalı olarak işaretlenmesine bağlıdır. Yani, mevcut sistemde faydalı olarak işaretlenme, diğer tüketicilerin algılarına bağlıdır.

Uzun bir giriş oldu ancak anlatacağım süreçlerin, bir sorunu çözmeye odaklı olarak anlatmak istiyorum. Yoksa, hazır veri setleri üzerinde kodlarımızı yazar ve yolumuza devam ederdik. Ancak bu tarz yaklaşımlar çok fazla ve benim sizlerle paylaşacağım veri seti tamamen kendim elde ettim, bir ürüne ait gerçek tüketici değerlendirmeleri. Ürüne ait veri setlerini ve bütün kodlara şu repo üzerinden erişebilirsiniz.

Hazırsanız, başlayalım!

Öncelikle, kullanacağımız kütüphaneler import ederek başlayalım.

Evet, buraya kadar gayet iyi geldik. Şimdi sırada, veri setimizi eklemek var. Veri setimiz 2 adet, birisi direkt olarak tüketici değerlendirmelerini içeriyor, diğeri ise öğrenme seti olarak hazırlanmış durumda. Çalışmam sırasında bu daha kolayıma geldiği için bu şekilde yaptım. Veri setleri de hazır olduğu için bozmak istemedim. Siz daha efektif veya verimli bir yol kullanabilirsiniz.

Veri setinde metin olduğu zaman, bu metin de özellikle direkt olarak Twitter gibi kullanıcıların kendi hazırlamış olduğu veri ise metnin içeriğinde “;” veya “,” gibi noktalama işaretleri bulunmakta. Bunun, CSV formatında bir karışıklığa sebep olmaması için CSV formatına çevirmeden “;” ya da “,” noktalama işaretlerini tamamen kaldırıyorum. Böylece istediğimiz noktalama işaretlerini ayırıcı olarak kullanabiliriz.

Corpus setimizde şu an kullanmayacağımız ancak ben veri çekerken “belki bu açıdan da değerlendirebiliriz, lazım olursa dursun” diye veriler de bulunmakta. Corpus şöyle görünmekte.

corpus

Corpus’da olup da kullanmadığımız veriler;

  • Faydasız işaretlenme sayısı,
  • Tarih,
  • Satıcı

Bu bilgiler öğrenme setinde direkt veya dolaylı olarak bulunmayacak.

ogrenme_seti

Öğrenme seti hazırlanırken dönüşümler şu şekilde yapıldı;

  • Savaş Yıldırım Hocamızın hazırlamış olduğu pre-trained model ile metinlerimizden duygu analizi çıkardık. Pozitif duygu içeren metin olarak tanımlananlar set’te 1, Negatif duygu içerenler ise 0 olarak ifade edildi.
  • Metinler direkt .count() gibi metotlar ile kelime sayılarına dönüştürüldü.
  • Yıldız derecelendirmeleri, veri setinde sadece 5 ve 1 idi. Yani sadece 5 yıldızlı ya da 1 yıldızlı yorumlar vardı. Bu yorumlar 1 ve 0 olarak ifade ediliyor.
  • Fotoğraflı değerlendirmeler, eğer bir değerlendirme fotoğraf içeriyorsa 1, içermiyorsa 0 olarak ifade ediliyor.

Değerlendirmeleri aldığımız çevrimiçi alışveriş sitesinde, tüketiciler kendi yorumlarına da +1 verebilmekte. Bunun “faydalı tüketici değerlendirmesi” algısını şüpheye düşürmemesi için, en az 2 defa ya da daha fazla kez “faydalı” olarak işaretlenen tüketici değerlendirmeleri setimizde 1, 1 kez faydalı işaretlenmiş ya da hiç faydalı işaretlenmemiş tüketici değerlendirmeleri setimizde 0 olarak işaretlenmekte.

Algoritmalarımızın tahminlerini 1 ya da 0 olarak yapmasını istiyoruz.

  • 1, bahsi geçen özelliklere sahip özelliklere sahip yorumlar diğer tüketiciler tarafından “faydalı” olarak işaretlenebilir.
  • 0, bahsi geçen özelliklere sahip özelliklere sahip yorumlar diğer tüketiciler tarafından “faydalı” olarak işaretlenmeyebilir.

Bu noktadan sonra, kelime sayılarını normalize ediyoruz. Çünkü normalde 0 ile 375~ arasında değişen kelime sayılarını bütün veri setinde olduğu gibi 0 ile 1 arasına çekiyoruz. Bizim için kelime sayısının oransal olarak ifade edilmesi de yeterli. Daha önceden ogrenme_seti içerisinde bulunan kelime sayılarını normalize ederek tekrardan kelime sayısı sütunun içine yazıyoruz.

Bu normalizasyon ile birlikte bütün veri setimiz 1 ile 0 arasına indirgenmiş oluyor.

ogrenme_seti’nin Son Hali

Bu noktadan itibaren artık setimiz hazır. Setimizde 267 adet “faydalı” yani 1 etiketine sahip veri varken 4488 adet “faydalı değil” yani 0 etiketine sahip veri var. Artık kullanacağımız denetimli öğrenme algoritmalarını da tanımlayabiliriz.

Naive Bayes ve Logistik Regresyon algoritmaları lineer modellerdir. Karar Ağacı, Rassal Orman, Gradyan Arttırma ve XGBoost algoritmaları ise non-linear yani lineer olmayan ağaç temelli algoritmalardır. Karara ağacı hariç diğer ağaç temelli algoritmalar, karar ağacının türetilmiş ya da tune edilmiş versiyonlarıdır.

Burada kafanızda “neden her seferinde tekrardan train-test-split yaptık ve neden hepsinin random_state’i farklı?” gibi bir soru oluşabilir ancak bunu bir başka yazımda daha detaylı bir şekilde açıklayacağım çünkü kendisi bu yazı gibi başlı başına bir yazı. Model eğitimleriyle birlikte f1 skorlarını da hemen oluşturuyoruz. Diğer kullanacağımız değerleri de burada hesaplatabilirdik ancak kodu kurgularken bunu düşünemedim.

Modellerimizi eğittiğimize göre, ilk sonuçları görebiliriz.

Bu kodlar bize şöyle bir görsel vermeli.

Accuracy Skorları

Nedense yüzdelerin yazdığı font küçülmüş ama sanırım plt kütüphanesinde yapılan değişiklikler yüzünden. Evet, ilk eğitim sonucumuzda bize Logistik regresyonun %94,53 ile en başarılı algoritma olduğunu göstermekte. Ancak, bu bir ölçüt değil. Çünkü veri setimizin %94,38'i 0 etiketine sahip. Yani bütün tahminlerini 0 yapsaydı, elde edeceğimiz başarı oranı %94,38 olurdu. Bu sebepten ötürü sınıflandırma başarısını ölçmemiz gerekiyor.

Bu amaçla kullanacağımız ilk ölçüt ROC-AUC olacaktır. Bununla ilgili bir yazı hazırlamayı da planlıyorum. Önce kodlar,

Bize vereceği çıktı da şöyle oluyor.

ROC-AUC Oranları

Burada Karar Ağacı algoritmasının %92,33 ile -özellikle XGBoost ve Naive Bayes algoritmalarına göre- çok iyi başarı göstermiştir. Bu grafiği bir de eğri üzerinde görelim.

Bu kod parçasının bize vereceği çıktı da aşağıdaki grafiktir. Bu grafik, üstteki grafikten farklı değil. Aynı oranlara göre şekillenmiş durumda, sadece ROC-AUC eğrisinin genel gösterimi aşağıdaki gibidir.

ROC-AUC Curve

Ancak, bununla kalmıyor, ayrıca F1 skorlarına bakıyoruz. Bu kavramların ne olduğunu da açıkladığım yazıları ayrıca hazırlayacağım.

Normalde, bir tüketici değerlendirmesinin “faydalı” olarak işaretlenmesinin önünde birden fazla etken vardır. Ancak biz burada içeriğe sadece duygu skoru ile bakarak, metin uzunluğu ve değerlendirmenin fotoğraflı olup olmamasına bakarak %71 F1 skoruna ulaştık. İçeriğe bakılarak (özellikle ilerleyen çalışmalarda) çok daha tutarlı ve çok daha isabetli sonuçlara ulaşabileceğimize inanıyorum.

Son olarak, algoritmaların karar verirken, hangi özniteliklere daha fazla ağırlık verdiğini görelim.

Logistik Regresyon Algoritması için bize vermiş olduğu Öznitelik Ağırlıkları şu şekildedir.

Özniteliklerin pozitif ya da negatif ağırlıklara sahip olmasından çok, katsayıları sonuç için daha önemlidir. Ağırlıklar konusunu çok basit: lineer regresyon isimli yazımda anlatmıştım.

Evet! Yazının sonuna geldik. Normalde akademik bir çalışma olduğu için aslında asıl kısım literatürü ve uygulamaya katkısı ancak, sizler için kod bloklarının ve görselleştirme konusundaki kısımların daha faydalı olacağını düşünüyorum. Normalde hep hazır veri setleri ve yüksek Accuracy oranları ile aslında “ya biz yapıyoruz da napıyoruz” konusu biraz aşmak ve her gün gördüğümüz şeylerin aslında makine öğrenmesi algoritmasına veri seti olabileceği bakışını aktarmak için yazdım. Bu yazıyla birlikte, bir yol haritası da hazırlıyorum.

  • Tezim YÖKTEZ üzerinden yayınlandığında buraya bir link bırakacağım.
  • random_state ile ilgili bir yazı hazırlayacağım.
  • ROC-AUC nedir, neden kullanıyoruz ve sonuçlarımız bize ne anlatıyor konulu bir yazı hazırlayacağım.
  • F1 Skor nedir, neden kullanıyoruz ve sonuçlarımız bize ne anlatıyor konulu bir yazı hazırlayacağım.

Herhangi bir sorunuz olursa, oguzhari@gmail.com ve oari@sakarya.edu.tr adresleri üzerinden sorularınızı sorabilirsiniz.

Son olarak, hoşçakalın!

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Oğuzhan Arı
Oğuzhan Arı

No responses yet

Write a response