Python ile Makine Öğrenimi Kullanarak Sahte Haber Tahmini

Photo by AbsolutVision on Unsplash

Giriş

Günümüzde, bilgiye ulaşmanın hızı ve kolaylığı, medya üzerinde büyük bir etki yaratmaktadır. Ancak, bu hızlı bilgi akışının beraberinde getirdiği bir sorun da vardır: Sahte haberler. Sahte haberler, gerçeklikten uzak, manipülatif içerikleriyle toplumda kafa karışıklığına ve yanlış bilgilendirmeye yol açabilir. Bu bağlamda, bu araştırmada, Python programlama dili kullanılarak makine öğrenimi teknikleriyle Google Colab ortamında sahte haberleri tahmin etmeye odaklanılmıştır.

Araştırma Amaçları

Veri Toplama ve Temizleme: İlk aşamada, çeşitli kaynaklardan elde edilen haber verileri toplanacak ve bu veriler özel bir ön işleme sürecinden geçirilecek. Bu aşama, veri madenciliği becerilerini kullanarak güvenilir ve temiz bir veri seti oluşturmayı amaçlamaktadır.

Özellik Mühendisliği: Veri seti üzerinde çalışma yapabilmek için gerekli özellikler çıkarılacak ve veri seti makine öğrenimi algoritmalarına uygun hale getirilecektir. Bu aşama, öğrencilerin veri madenciliği ve özellik mühendisliği konularındaki yeteneklerini geliştirmeyi hedefler.

Makine Öğrenimi Modeli Oluşturma: Elde edilen temiz veri seti üzerinde, Python’da popüler makine öğrenimi kütüphaneleri (örneğin, Scikit-Learn) kullanılarak bir öğrenme modeli oluşturulacak. Bu model, sahte haberleri doğru bir şekilde tahmin edebilmek için eğitilecek.

Değerlendirme ve Sonuçlar: Oluşturulan model, test verileri üzerinde değerlendirilecek ve elde edilen sonuçlar raporlanacaktır. Bu aşama, öğrencilerin model performansını değerlendirme ve sonuçları yorumlama yeteneklerini ölçmeyi amaçlar.

Araştırmanın Yol Haritası

Bu araştırma, Kaggle platformu üzerinden elde edilen Fake News veri seti üzerinde yürütülmektedir. İlk aşama olarak, toplanan veri seti üzerinde veri madenciliği prensipleri kullanılarak temizlik işlemleri gerçekleştirilmiştir. Bu adım, veri setinin güvenilirliğini artırmak ve model performansını optimize etmek amacıyla gerçekleştirilmiştir.

Ardından, veri madenciliği yöntemlerinin kullanım aşamasında, veri setinden çeşitli özellikler çıkarılarak, makine öğrenimi algoritmalarına uygun hale getirilmiştir. Bu sayede, modelin eğitilmesi ve sahte haber tahmini yapabilmesi için gerekli olan veri seti hazırlanmıştır.

Veri setinin hazırlanmasının ardından, train ve test verileri olarak iki ayrı set oluşturularak, modelin eğitilmesi ve performansının değerlendirilmesi için gerekli adımlar atılmıştır. Bu aşama, makine öğrenimi modelinin güvenilirliğini test etmek ve gerçek dünya verilerine adapte olmasını sağlamak için önemlidir.

Son olarak, elde edilen sonuçları görselleştirmek amacıyla linear lojistik regresyon grafikleri çizilmiştir. Bu grafikler, modelin eğitilmiş ve eğitilmemiş durumlarını karşılaştırmak için kullanılarak, modelin sahte haber tahmin yeteneği üzerindeki etkilerini görsel olarak ifade etmektedir.

Bu aşamaların bir araya getirilmesi, sahte haber tahmini konusundaki makine öğrenimi yaklaşımının etkinliğini değerlendirmek ve modelin gerçek dünya verileriyle başa çıkma yeteneğini anlamak açısından önemlidir.

Araştırma Detayları

Bu bölümde araştırma ile ilgili detaylar aşama aşama gösterilmeye çalışılacaktır.

Git Versiyon Kontrol Sistemi Aşamaları

Bu iki satır, Git konfigürasyonlarınızı belirlemek için kullanılmaktadır. İlk satır, global olarak kullanıcı e-posta adresinizi belirlerken, ikinci satır ise global olarak kullanıcı adınızı belirler.

Colab ve Drive Bağlantı Aşamaları

Bu kod bloğu, Google Colab ortamında Google Drive’ı bağlamak ve ardından belirli bir dosya yolunda bulunan bir CSV dosyasının tam yolunu oluşturmayı amaçlar. İlk satır, Google Colab kütüphanesinden drive modülünü içe aktarır ve ardından bu modül aracılığıyla Google Drive’ı Colab ortamına bağlar. Bu, Google Drive üzerindeki dosyalara erişim sağlamak için kullanılır. İkinci blok, drive.mount(‘/content/gdrive’), Colab ortamına Google Drive’ı /content/gdrive dizinine bağlar. Sonraki satırlarda ise bir CSV dosyasının adı ve dosyanın bulunduğu Google Drive’daki yol belirtilir. full_path değişkeni, bu dosyanın tam yolunu temsil eder. Bu kod bloğu, Google Drive’ınızda belirli bir dosyaya Colab üzerinden erişim sağlamak ve bu dosyayı Colab ortamında kullanmak için kullanılır. Bu özellikle Colab ortamında çalışırken, veri dosyalarınıza kolay erişim sağlamak ve bu dosyaları analiz veya makine öğrenimi işlemleri için kullanmak için yaygın bir yöntemdir.

Araştırma Kapsamında Kullanılacak Kütüphanelerin Tanıtılması ve Yüklenmesi

Pandas
Pandas kütüphanesi, Python programlama dilinde veri manipülasyonu ve analizi için kullanılan güçlü bir araçtır. Veri çerçeveleri adı verilen tablo benzeri veri yapıları üzerinde çalışmayı sağlar, bu da veriyi kolayca filtreleme, gruplama, sıralama ve dönüştürme gibi işlemleri yapmayı daha etkili hale getirir. Ayrıca, Pandas, veri analizi ve temizleme süreçlerini hızlandıran geniş bir fonksiyon ve metod koleksiyonu sunar. Pandas kütüphanesi, projede bir değişkende belirtilen dosya yolundaki CSV formatındaki haber veri setini okuyarak, projenizdeki haber verilerini kolayca içe aktarmanızı ve daha sonra bu veriler üzerinde analiz veya manipülasyon işlemleri yapmanızı sağlamak amacıyla kullanılmıştır.

Re

re kütüphanesi, Python’da düzenli ifadeleri işlemek için kullanılır ve bu projede kullanılan re.sub fonksiyonu, metin içerisindeki non-alphanumeric karakterleri temizleyerek, yani yalnızca harfleri koruyarak metin içeriğini düzenler. Bu, veri temizleme işlemlerinde sıkça kullanılır ve metin madenciliği veya doğal dil işleme projelerinde verinin anlamlı özelliklerini çıkarmak için önemlidir. re kütüphanesi genel olarak metin işleme ve düzenli ifadelerle ilgili işlemleri gerçekleştirmek için kullanılır.

Nltk

nltk kütüphanesi, doğal dil işleme (NLP) uygulamalarında sıkça kullanılan bir araçtır. nltk.download(‘stopwords’) ifadesi, proje kapsamında yaygın olarak kullanılan dil işleme kaynaklarından biri olan “stopwords” (durak kelimeleri) listesini indirir. Bu liste, genellikle metin madenciliği ve analizi sırasında analitik değeri düşük olan yaygın kelimeleri içerir ve bu kelimelerin analiz sırasında dikkate alınmamasını sağlar. nltk kütüphanesi, dil işleme görevlerinde metin tokenizasyonu, kelime kökleri çıkarma (stemming), lemmatizasyon gibi işlemler için geniş bir araç seti sunar.

Nltk Corpus

nltk.corpus.stopwords, doğal dil işleme projelerinde kullanılan bir kütüphanedir ve içerdiği dildeki yaygın durak kelimelerini (stopwords) içerir. Bu kelimeler genellikle dil analizi sırasında önemsiz kabul edilen, sıklıkla kullanılan ve anlam taşımayan kelimelerdir. Analiz sırasında bu durak kelimelerinin çıkarılması, metin verilerinin daha temiz bir şekilde işlenmesini ve anlam odaklı analiz yapılmasını sağlar. Bu araştırma kapsamında da bu amaçla kullanılmıştır.

PorterStemmer

nltk.stem.porter.PorterStemmer, doğal dil işleme projelerinde kullanılan bir kök çıkarma (stemming) aracıdır. Metin içindeki kelimeleri köklerine indirger, yani kelimenin temel formunu alır.

TfidfVectorizer

TfidfVectorizer, metin verilerini sayısal özelliklere dönüştürmek için kullanılan bir araçtır. Metin madenciliği ve doğal dil işleme projelerinde sıkça kullanılır. Term Frekans-Inverse Doküman Frekansı (TF-IDF) yöntemini uygular. Bu yöntem, bir belgede geçen bir kelimenin önemini belirler. Yüksek TF-IDF skorları, bir kelimenin belirli bir belgede sıkça geçtiğini ve genel koleksiyon içinde daha az yaygın olduğunu gösterir. Bu, metin verilerini sayısal bir formata dönüştürerek, makine öğrenimi modellerine girdi olarak verilebilmesini sağlar ve kelime önem sırasını dikkate alarak analiz yapılmasına imkan tanır. Bu araştırma kapsamında da bu amaç ile kullanılmıştır.

Train_Test_Split

train_test_split fonksiyonu, veri setini eğitim ve test alt kümelerine rastgele ayırmak için kullanılır. Bu, makine öğrenimi modellerini eğitmek ve değerlendirmek amacıyla kullanılan veriyi iki ayrı parçaya bölmek için kullanılır. Eğitim veri seti, modelin öğrenme sürecinde kullanılırken, test veri seti modelin performansını değerlendirmek için kullanılır. Bu sayede modelin genelleme yeteneği test edilebilir ve aşırı uydurma (overfitting) durumları önlenebilir. Bu araştırma kapsamında da bu amaçla kullanılmıştır.

Logistic Regression

LogisticRegression, ikili (binary) veya çok sınıflı sınıflandırma problemleri için kullanılan bir makine öğrenimi modelidir. Veri setindeki özellikleri kullanarak, giriş örneklerini iki veya daha fazla sınıfa tahmin etmek için lojistik fonksiyonu kullanır. LogisticRegression modeli, sınıflandırma görevlerinde özellikle lineer ayrımın etkili olduğu durumlarda kullanılır. Bu araştırmada da bu amaçla kullanılmıştır.

Sklearn.metrics

accuracy_score ve classification_report fonksiyonları, makine öğrenimi modellerinin performansını değerlendirmek için kullanılan metrik ve araçları içeren sklearn.metrics modülünden gelir.

accuracy_score: Doğruluk skoru, sınıflandırma modellerinin doğru tahmin oranını ölçer. Gerçek sınıf etiketleri ile tahmin edilen sınıf etiketleri arasındaki doğru tahmin oranını ifade eder.

classification_report: Sınıflandırma raporu, doğruluk, hassasiyet, geri çağrı ve F1 skoru gibi sınıflandırma modelinin temel performans metriklerini içeren bir rapor üretir.

Bu araştırmada da metriklerin belirlenmesi için bu kütüphaneden faydanılmıştır.

Lojistik Regresyon

Lojistik Regresyon (Logit Regresyon olarak da adlandırılır) genellikle bir örneğin belirli bir sınıfa ait olma olasılığını tahmin etmek için kullanılır (örneğin, bu e-postanın spam olma olasılığı nedir?). Eğer tahmini olasılık 50’den büyükse, model örneğin o sınıfa ait olduğunu tahmin eder (pozitif sınıf olarak adlandırılır, “1” olarak etiketlenir), ya da olmadığını tahmin eder (yani “0” olarak etiketlenen negatif sınıfa aittir). Bu da onu ikili bir sınıflandırıcı yapar.

Tahminleme Olasılıkları

Peki nasıl çalışır? Tıpkı Doğrusal Regresyon modeli gibi, Lojistik Regresyon modeli, girdi özelliklerinin ağırlıklı bir toplamını (artı bir yanlılık terimi) hesaplar, ancak bunun yerine Doğrusal Regresyon modelinin yaptığı gibi sonucu doğrudan çıktı olarak vermek yerine, lojistiğine bakar.

Lojistik Regresyon Modeli Tahmini Olasılık

Logistik — logit olarak da adlandırılır, σ(-) olarak not edilir — sigmoid bir fonksiyondur (yani S şeklindedir) 0 ile 1 arasında bir sayı çıktısı veren bir fonksiyondur.

Sigmoid Fonksiyonu

Lojistik Regresyon modeli p = hθ olasılığını tahmin ettikten sonra (x) bir x örneği pozitif sınıfa aitse, ŷ tahminini kolayca yapabilir.

Lojistik Regresyon modeli tahmini

Lojistik Regresyon (Logit Regresyon olarak da adlandırılır) genellikle bir örneğin belirli bir sınıfa ait olma olasılığını tahmin etmek için kullanılır (örneğin, bu e-postanın spam olma olasılığı nedir?). Eğer tahmini olasılık 50’den büyükse, model örneğin o sınıfa ait olduğunu tahmin eder (pozitif sınıf olarak adlandırılır, “1” olarak etiketlenir), ya da olmadığını tahmin eder (yani “0” olarak etiketlenen negatif sınıfa aittir). Bu da onu ikili bir sınıflandırıcı yapar.

Lojistik regresyon, isminde “regresyon” geçmesine rağmen bir sınıflandırma algoritmasıdır. Yani görseldeki hayvanın kedi mi, köpek mi olduğu veya verilmiş olan bilgilerin bir erkeğe mi yoksa bir kadına mı ait olduğunu tahmin etme gibi iki sınıflı sınıflandırma problemlerinde sıkça kullanılır. Lojistik regresyonun, lineer regresyon ile arasındaki en büyük farkı iki sınıfı birbirinden ayıracak çizgiyi nasıl uyguladığıdır (fit). Lineer regresyon, optimum çizgiyi çizmek için “En Küçük Kareler Yöntemi” (Least Squares) kullanırken, lojistik regresyon “Maksimum Olabilirlik” (Maximum Likelihood) kullanır.

Eğitim ve Maliyet Fonksiyonu

Eğitim ve Maliyet Fonksiyonu Eğitimin amacı, θ parametre vektörünü, modelin pozitif örnekler için yüksek olasılıkları tahmin edeceği şekilde ayarlamaktır (y = 1) ve negatif örnekler için düşük olasılıklar (y = 0).

Tek bir eğitim örneğinin maliyet fonksiyonu

Bu maliyet fonksiyonu mantıklıdır çünkü — log(t), t 0’a yaklaştığında çok büyür, bu nedenle model pozitif bir örnek için 0’a yakın bir olasılık tahmin ederse maliyet büyük olacaktır ve model negatif bir örnek için 1’e yakın bir olasılık tahmin ederse de çok büyük olacaktır. Öte yandan, t 1’e yakın olduğunda — log(t) 0’a yakındır, bu nedenle tahmin edilen olasılık negatif bir örnek için 0’a yakınsa veya pozitif bir örnek için 1’e yakınsa maliyet 0’a yakın olacaktır, ki bu tam olarak istediğimiz şeydir. Tüm eğitim seti üzerindeki maliyet fonksiyonu basitçe tüm eğitim örnekleri üzerindeki ortalama maliyettir.

Ortalama Maliyet

Araştırmanın Aşamalı Anlatımı

  • Aşağıdaki Python kodu, doğal dil işleme kütüphanesi olan NLTK’nın İngilizce dilindeki durma kelimelerini (stopwords) indirip ekrana yazdırır. Durma kelimeleri genellikle metin madenciliği ve metin analizi gibi işlemlerde önemsiz kelimeleri filtrelemek için kullanılır.
  • Aşağıdaki Python kodu, bir CSV dosyasındaki veri setini pandas kütüphanesini kullanarak bir DataFrame’e yükler.
  • Aşağıdaki kod , ‘news_dataset’ adlı pandas DataFrame’inin boyutunu, yani satır ve sütun sayısını döndürür.
  • Aşağıdaki kod news_dataset içerisindeki ilk beş satırı görüntüler.
  • Aşağıdaki kodla veri kümesindeki eksik değerlerin sayısı bulunur.
  • Aşağıdaki kod, veri ön işleme aşamasında kullanılır. Eğer veri setinde boş (NULL) değerler varsa, bu değerleri boş bir dize (‘’) ile doldurarak eksik veya boş verilerin daha kolay yönetilmesini ve analiz edilmesini sağlar. Boş değerlerle başa çıkmak, veri analizi ve makine öğrenimi modellerinin daha güvenilir ve etkili olmasını sağlamak için yaygın bir ön işleme adımıdır.
  • Bu kod, ‘author’ (yazar) ve ‘title’ (başlık) sütunlarındaki bilgileri birleştirerek yeni bir ‘content’ sütunu oluşturur. Bu, metin madenciliği veya doğal dil işleme uygulamalarında, yazar adı ve başlık bilgilerini içeren bir metin özniteliği elde etmek için yaygın bir uygulamadır. Bu birleştirme işlemi, metin verilerinin daha kapsamlı bir şekilde analiz edilmesine ve daha sonra bu birleşik metin özniteliğinin kullanılmasına olanak tanır.
  • Aşağıdaki kod, ‘news_dataset’ adlı pandas DataFrame’den ‘label’ sütununu çıkararak (drop) ve bu sütunu bağımlı değişken (Y) olarak ayırarak, bağımsız değişkenleri (X) oluşturur. Genellikle makine öğrenimi uygulamalarında, bağımsız değişkenler (X) modelin girdilerini temsil ederken, bağımlı değişken (Y) modelin çıkışını veya hedefini temsil eder. Bu ayrım, veri setini bağımsız ve bağımlı değişkenlere böler, böylece makine öğrenimi modeli, veri setindeki desenleri ve ilişkileri öğrenmeye çalışabilir. ‘label’ sütunu genellikle modelin öğrenmeye çalıştığı hedef değişkeni içerir, bu nedenle bu sütunu Y olarak ayırmak yaygın bir uygulamadır.
  • Bu kod, veri setindeki metin içeriklerinde kelime köklerini (stem) elde etmek amacıyla bir dizi ön işleme adımı gerçekleştirir. Ayrıca, küçük harfe dönüştürme, noktalama işaretlerini temizleme, durma kelimelerini filtreleme ve Porter Stemmer algoritmasını kullanarak kelime köklerini çıkarma işlemlerini içerir. Bu işlemlerin nedeni, metin verilerini daha homojen, anlamlı ve işlenebilir hale getirerek, makine öğrenimi modellerine daha etkili bir şekilde girdi sağlamaktır. Özellikle, kelime köklerine indirgenmiş metin verileri, benzer anlamlı kelimelerin aynı temsilini sağlar ve bu da modelin daha iyi öğrenmesini destekleyebilir.
  • Aşağıdaki kodda content ve label alanları ayrılır ve X,Y’e atanır.
  • Aşağıdaki işlem, metin verilerini sayısal verilere dönüştürmeyi amaçlar. TfidfVectorizer, metin belgelerini TF-IDF (Term Frequency-Inverse Document Frequency) vektörleri olarak temsil eden bir vektörleştirici (vectorizer) örneğidir. TF-IDF, bir belgedeki bir kelimenin önemini belirlemek için kullanılan bir istatistiksel ölçüdür. Bu dönüşüm, metin verilerini sayısal matrislere çevirerek, makine öğrenimi modellerine girdi olarak sağlamak için yaygın olarak kullanılır. Bu sayede, metin verileri üzerinde istatistiksel analiz ve makine öğrenimi algoritmaları uygulanabilir.
  • Aşağıdaki kod, veri setini eğitim ve test setlerine ayırmak için kullanılır. train_test_split fonksiyonu, bağımsız değişkenleri (X) ve bağımlı değişkeni (Y) belirtilen oranlarda eğitim ve test setlerine bölerek, modelin eğitilmesi ve performansının değerlendirilmesi için ayrı veri setleri oluşturur. test_size parametresi, test setinin oranını belirler, stratify parametresi ise sınıflar arasındaki dağılımı koruyarak bölümü sağlar. random_state parametresi, her çalıştırıldığında aynı bölümü elde etmek için kullanılır. Bu işlem, modelin eğitim verileri üzerinde öğrenmesini ve test verileri üzerinde genellenme performansını değerlendirmesini sağlar.

Model Lojistik Regresyon kullanılarak eğitilir.

Aşağıdaki kodla test ve eğitim datasının Accuracy oranları bulunmuştur.

  • Aşağıdaki kodla bir sınıflandırma raporu çıkartılır. Sınıflandırma raporuna baktığımızda, oldukça yüksek precision, recall, ve f1-score değerleri görmekteyiz. Bu değerler, modelin sınıflandırma görevinde başarılı olduğunu gösterir. Precision (kesinlik), bir sınıfı pozitif olarak tahmin ettiğinde ne kadarının gerçekten pozitif olduğunu gösterir. Recall (duyarlılık), gerçekten pozitif olanların ne kadarını doğru bir şekilde tespit ettiğini gösterir. F1-score ise precision ve recall’un harmonik ortalamasını ifade eder. Yüksek precision ve recall değerleri, modelin hem 0 sınıfını hem de 1 sınıfını başarıyla tahmin ettiğini gösterir. Ayrıca, accuracy (doğruluk) değeri de yüksek (0.98), bu da modelin genel performansının iyi olduğunu gösterir.Sonuç olarak, verilen sınıflandırma raporuna göre modelin oldukça başarılı olduğu söylenebilir.
  • Aşağıdaki gibi test işlemi gerçekleştiğinde yalan haber verildiğinde bunla ilgili tespit yapıldığını görebilirsiniz.

Sonuç

Bu araştırmada, sahte haberleri tahmin etme amacı doğrultusunda Python programlama dili kullanılarak lojistik regresyon teknikleri de uygulanmıştır. Lojistik regresyon, makine öğrenimi modellerinden biri olarak, veri setindeki değişkenler arasındaki ilişkiyi analiz etmek ve sahte haberlerin tespitinde etkili bir model oluşturmak için kullanılmıştır. Bu yöntem, Google Colab ortamında gerçekleştirilen çalışmada elde edilen sonuçlarla birlikte, sahte haberlerin tanımlanmasında başarılı bir yaklaşım sağlamıştır. Proje kodlarına https://github.com/KardelRuveyda/detect-fake-news adresinden ulaşabilirsiniz.

Bir sonraki yazıda görüşmek üzere,

GitHub – KardelRuveyda/detect-fake-news: In this research, we focus on predicting fake news in…
In this research, we focus on predicting fake news in Google Colab environment with machine learning techniques using…github.com

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir