Zephyrnet Logosu

NLP'nin Endüstriyel Uygulaması: Görev I

Tarih:

Bu makale, Veri Bilimi Blogathon.

NLP kullanarak Tüketici Şikayetlerini Ayrıştırma hakkında uçtan uca Kılavuz

NLP'nin Endüstriyel Uygulaması
                                                                                                                         Kaynak: Yazar

Hey millet!

Bu yazıda, NLP'nin temel kavramlarını kullanarak çok detaylı bir şekilde Tüketici Şikayet Ayrımı olan gerçek bir İş Problemini çözeceğiz.

Özellik çıkarma, ham verilerle çalışma ve metinsel veriler üzerinde model eğitimi gibi doğal dil işleme temelleri kavramları konusunda zaten rahat olduğunuza inanıyorum.

NLP hakkında sıfırdan başlayarak bir dizi ayrıntılı makale yazdım, bu nedenle NLP'nin temelleri konusunda rahat değilseniz makalelerime başvurabilirsiniz.

İçerik Tablosu

  • Giriş ve Hedef
  • verileri yükleme
  • Özellik Mühendisliği ve Özellik Çıkarma
  • Keşifsel Veri Analizi (EDA)
  • Metin Ön İşleme
  • Çoklu Sınıflandırma Modelinin Eğitimi
  • Geri Çağırma, Hassasiyet, F1-skoru
  • Tahminler

Giriş

Finansal Koruma Bürosu, bazı yanıtlar için binlerce tüketicinin finansal hizmetler (ipotek, öğrenci kredileri vb.) ve ürünler (yani kredi kartları, banka kartları) hakkındaki şikayetlerini gönderen bir kuruluştur.

Şikayetlerin ayrıştırılması ve ilgili departmana iletilmesi gerekiyor, bu da şikayet kategorisini sınıflandırmak için insan müdahalesini azalttığımız için şikayetlerin yanıt süresini artırıyor.

Bu nedenle, ipotekle ilgili şikayetlerin ipotek departmanına iletilmesi gerektiği ve kredi kartı şikayetlerinin bankacılık ürünleri departmanına iletilmesi gerektiği gibi şikayeti okuyan ve ilgili departmana söyleyebilecek bir model oluşturmamız gerekiyor.

Gol

Bu Projenin Amacı, şikayeti ilgili ürün veya kategori departmanlarına ayırmaktır.

Şikayet ikiden fazla olabileceğinden çok sınıflı bir sınıflandırma olacaktır ve NLP ve makine öğrenmesi algoritmaları kullanılarak çözülebilir.

Makine öğrenimi modelini kullanarak şikayeti kolayca sınıflandırabiliyoruz, bu nedenle şikayeti sınıflandırmak için insan müdahalesini azaltıyor ve şikayetlerin yanıt süresini kısaltıyoruz.

Not: Eğitim ve test amacıyla etiketlenmiş veriler üzerinde çalıştığımız için metin sınıflandırması denetimli makine öğrenimine bir örnektir.

Bu Proje üzerinde çalışmaya başlayalım.

1. Veri Kümesini Yükleme ve Anlama

Tüketici Mali Koruma Bürosu tarafından sağlanan Tüketici Finansmanı Şikayetleri Veri Kümesi üzerinde çalışacağız.

Bunu kullanarak veri setini indirebilirsiniz. Link veya bir bulut Not Defteri oluşturup anında çalışabilirsiniz.

Verilerin yüklenmesi ve boşaltılması | NLP'nin Endüstriyel Uygulaması
Kaynak: Kaggle.com
  • Veri kümesini Pandas veri çerçevesine yükleme
pandaları pd olarak içe aktar numpy'yi np olarak içe aktar df = pd.read_csv("../input/consumer-complaint-database/rows.csv", low_memory = False) df.head()
Veri kümesi yükleniyor | NLP'nin Endüstriyel Uygulaması
Kaynak: Yazar

Bu veri kümesi çok sayıda sütun içeriyor ancak yalnızca iki sütuna [Ürün, Tüketici şikayeti anlatımı] odaklanmamız gerekiyor.

  • Product → Şikayet Kategorisi
  • Consumer complaint narrative → Tüketici Şikayet metni
df1 = df[['Ürün', 'Tüketici şikayeti anlatımı']] df1.columns = ['Ürün', 'Tüketici şikayeti']

adını değiştirdik”consumer complaint narrative"Kime"Consumer complaint” ve bir veri çerçevesinde tutulur df1 .

  • Yazısız Şikayetleri Filtreleme (Yanlış Şikayet)

Veri setinde metin gövdesi olmayan birçok şikayet var, bunlar yanlış şikayetlerdir, bu tür şikayetleri filtrelememiz gerekir.

df1 = df1[df1['Tüketici şikayeti'].isna() != Doğru]
NLP'nin Endüstriyel Uygulaması
                                                                                                                             Kaynak: Yazar

2. Özellik Mühendisliği

Özellik Mühendisliği altında, modeli verimli bir şekilde eğitmek ve verilere daha iyi bir bakış açısı elde etmek için bazı veri manipülasyonları yapıyoruz.

pd.DataFrame(df1.Product.unique()).değerler
Özellik Mühendisliği | NLP'nin Endüstriyel Uygulaması
Kaynak: Yazar

Veri setimizde 18 farklı şikayet kategorimiz var, şikayet kategorilerinden bazıları birbiriyle ilişkili. örneğin “Ön ödemeli kartın kredi kartı” ile “Ön Ödemeli Kart”, “Kredi kartı” birbiriyle ilişkilidir.

Bu nedenle, ilgili kategorileri birleştirmek için kategorileri yeniden adlandırmamız gerekiyor.

  • Kategorileri Yeniden Adlandırma
# df1.replace({'Ürün': ​​{ 'Kredi raporlama': 'Onarım veya Kredi raporlama', 'Kredi kartı': 'Kredi kartı veya ön ödemeli kart', 'Ön ödemeli kart': 'Kredi kartı veya ön ödemeli kart', 'kredi onarım hizmetleri,Kredi raporlama veya diğer kişisel tüketici raporları': 'Onarım veya Kredi raporlama', 'Para transferi': 'Para transferi, sanal para birimi veya para hizmeti', 'Ödeme günü kredisi': 'kredi kredisi' ,Payday ,Kişisel kredi', 'Sanal para birimi': 'Para transferi, sanal para birimi veya para hizmeti'}}, yerinde= Doğru)
Kategorileri yeniden adlandırma
Kaynak: Yazar

Yeniden adlandırdıktan sonra, sınıflandırmak için yalnızca 13 kategorimiz / Ürünümüz var.

Not: Üzerinde çalıştığımız Veri Kümesi çok büyük. 1.2 milyon satır içerir, bu nedenle büyük bir veri üzerinde eğitim çok zaman alacaktır, bu nedenle zamandan tasarruf etmek için eğitimimiz için yalnızca 10000 satırlık bir örnek alacağız.

df2 = df1.örnek(10000, rastgele_durum=1).kopya()

burada df2, üzerinde daha fazla çalışacağımız veri kümesidir ve 10000 satır ve 2 sütun içerir

  • Şimdiye kadar metinde veri setimiz var ve şikayet metnini ve kategoriyi bir sayıya dönüştürmemiz gerekiyor

Kategorileri Dönüştürme (Product) sayılara

df2['category_id'] = df2['Ürün'].factorize()[0]

Yeni bir sütun ekledik”category_id” ve kategori numarasını içerecektir.

Kategorileri dönüştürme
Kaynak: Yazar
  • Gördüğünüz gibi, kategori etiketini kategori_id'ye dönüştürdük, ayrıca kategori_kimliğini tahmin anında kategori etiketine geri dönüştürmek için verilere ihtiyacımız var. Bu amaçla bir sözlük oluşturacağız.
kategori_kimliği = df2[['Ürün', 'kategori_kimliği']].drop_duplicates() id_2_category = dict(category_id[['category_id', 'Ürün']].değerler)
NLP'nin Endüstriyel Uygulaması
Kaynak: Yazar

kullanacağız id_2_category class_id'yi class_lable'a dönüştürmek için sözlük.

3. EDA'nın Gerçekleştirilmesi

EDA kapsamında verilerimizi keşfediyor, verilerin ilişkisini ve çeşitli içgörülerini anlamak için grafikler çiziyoruz.

Ürün/Kategori ve Şikayet Sayısının Grafiklendirilmesi

matplotlib.pyplot'u plt olarak içe aktarın seaborn'u sns olarak içe aktar fig = plt.figure(figsize=(8,6)) renkler = ['gri','gri','gri','gri','gri','gri' ,'gri','gri','gri', 'gri','koyu mavi','koyu mavi','koyu mavi'] df2.groupby('Ürün')['Tüketici şikayeti'].count().sort_values( ).plot.barh( ylim=0, color=colors, title= 'HER ÜRÜN KATEGORİSİNDEKİ ŞİKAYET SAYISIn') plt.xlabel('Yinelenme sayısı', yazı tipi boyutu = 10)
EDA'yı Gerçekleştirme | NLP'nin Endüstriyel Uygulaması
Kaynak: Yazar

“Kredi raporlaması, onarım ve diğer” en fazla destekleyici kayıtlara sahip olduğunu ve “Diğer finansal Hizmetler”in çok az kaydı olduğunu muhtemelen görebilirsiniz. Bu, bazı Olası veri dengesizliklerini gösterir ve bu, her kategoriden/Üründen eşit kayıtlar örneklenerek düzeltilebilir.

4. Özellik Mühendisliği

Şimdi Şikayet metnini bazı vektörlere dönüştürmemiz gerekiyor çünkü makine metinsel verileri anlayamıyor. Bu işleme Özellik Çıkarma denir.

Kullanacağız tf-idf Vectorizer (Ters Belge Frekansı) özellik çıkarımı için. Özellik Mühendisliği konusunda rahat değilseniz, makalemi tercih edin.

TFIDF, bir belgenin bir koleksiyon veya belge grubundaki belgesi için ne kadar önemli olduğunu değerlendirdi.

Not: Noktalama işaretlerini kaldırdıktan sonra kelimeleri küçük harf yaparak özellik çıkarma adımına geçebiliriz. TFIDF vectorizer, stopwords'ü kendi başına işleyebilir.

Dönem Frekansı: Bu, belirli bir kelimenin bir belgede ne sıklıkta geçtiğini söyler.

Ters Belge Frekansı: Terim Frekansının tersidir. Belirli bir kelime belgeler arasında birçok kez görünüyorsa, IDF puanı düşük olacaktır.

sklearn.feature_extraction.text'ten içe aktarma TfidfVectorizer tfidf = TfidfVectorizer(sublinear_tf=True, min_df=5, ngram_range=(1, 2), stop_words='english')
# Vektörleştirme özellikleri = tfidf.fit_transform(df2['Tüketici şikayeti']).toarray() etiketleri = df2.category_id
  • min_df: ' den daha az görünen bu kelimeleri kelime dağarcığından kaldırır.min_df'Dosya sayısı.
  • sublinear_tf = TrueFrekans terimini logaritmik bir ölçekte ölçeklendirin.
  • stop_words: bahsi geçen dilin stopwords'lerini kaldırır.
  • ngram_range =(1, 2) Unigram ve bigram her ikisi de dikkate alınacaktır
  • max_df: ' den daha fazla ortaya çıkan kelimeleri kelime dağarcığından kaldırır.maxdf'

Veri Kümesini Bölme

Veri kümesini eğitim ve test bölümlerine bölme. Kayıtların %75'i eğitim, kalanı ise test amaçlı kullanılacaktır.

sklearn.model_selection'dan içeri aktar train_test_split X_train, X_test, y_train, y_test = train_test_split(özellikler, etiketler, test_size=0.25, random_state = 0)

5. Model Eğitimi

Kullanacağız DoğrusalSVC bu nedenle iyi performans gösterdi, diğer modelleri de deneyebilir ve performanslarını kontrol edebilirsiniz.

sklearn.svm'den içe aktarma LinearSVC modeli = LinearSVC() model.fit(X_train, y_train)

6. Değerlendirme ve Test Etme

Modelimizin nasıl performans gösterdiğini görmek için kullanacağız sklearn’s metrics sınıf. Bir Sınıflandırma raporu ve karışıklık matrisi kullanacağız.

sklearn'den metrikleri sklearn.metrics'den içeri aktar sınıflandırma_report # Sınıflandırma raporu y_pred = model.predict(X_test) print(metrics.classification_report(y_test, y_pred, target_names= df2['Ürün'].unique()))
Değerlendirme ve Test
Kaynak: Yazar

Gözlemlediğiniz gibi, daha fazla desteğe sahip sınıflar (veri satırları) daha iyi f1 puanına sahipler. bu oluyor çünkü bu sınıflar daha fazla veri üzerinde eğitiliyor. Bu sorunu çözmek için, daha önce tartıştığımız gibi verileri dengelemeliyiz.

gibi sınıflar 'İpotek', 'Öğrenci kredisi 'Kredi raporlama, onarım veya diğer' daha hassas bir şekilde sınıflandırılabilir.

Karışıklık Matrisi Çizimi

seaborn'u sklearn.metrics'den sns sns.set() olarak içe aktarın blur_matrix'i içe aktar conf_mat = concept_matrix(y_test, y_pred) fig, ax = plt.subplots(figsize=(8,8)) sns.heatmap(conf_mat, annot=True, cmap) ="Blues", fmt='d', xticklabels=category_id.Product.values, yticklabels=category_id.Product.values) plt.ylabel('Actual') plt.xlabel('Öngörülen') plt.title("CONFUSION MATRIX - LinearSVCn", boyut=16);
Karışıklık matrisinin çizilmesi
Kaynak: Yazar

Kredi kartı raporlama ve veri toplama sınıflarının diğerlerinden daha hassas olduğu açıkça görülmektedir.

7. Tahmin

Bazı tahminler için modelimizi denemenin zamanı geldi. bir şikayet metni ileteceğiz ve modelimiz şikayet sınıfına göre sınıflandıracak.

şikayet = """2019'da Indian University'ye yeniden kaydoldum. Birkaç gün önce Navient tarafından taciz edildim. Onlara istedikleri her şeyi sağlayan evrakları faksladım ve hala ödemeler için telefonlar alıyorum. Ayrıca, Navient şimdi kredi bürolarına ödemeye geç kaldığımı bildiriyor.Bu noktada Navient'in daha fazla adım atmamam için birlikte hareket etmesi gerekiyor"""

Metni doğrudan tahmin için eğitilmiş modele iletemeyiz, özellik çıkarma için takılı vektörleyicimizi kullanmamız gerekir ve ancak o zaman tahmin için özelliklerimizi ileteceğiz.

şikayet_id = (model.predict(tfidf.transform([şikayet]))) print("şikayet", id_2_category[şikayet_id[0]])

çıktı:

öğrenci kredisinden şikayet et

Modelimizin doğru bir şekilde tahmin ettiği açıkça görülüyor.

Sonuç

Bu yazıda NLP kullanarak bir İş Problemini Çözdük, veri temizleme, EDA, özellik çıkarma, özellik mühendisliği gibi çeşitli kavramları kullandık ve şikayet türlerinin ayrılması için modelimizi başarıyla oluşturduk.

Ayrıca sınıflandırma için BERT, LSTM gibi farklı modelleri deneyebilir, kelime gömme TFIDF Vectorizer'a göre daha üstün olduğu için kelime gömmeyi de deneyebilirsiniz.

Bir sonraki makalede, Python ile basit uygulama ile konu notları için Metin özetlemeyi ele alacağız.

NLP ile ilgili daha fazla makaleyi sitemizde okuyun. Web sitesi

Benim için herhangi bir öneriniz veya sorunuz varsa, bana ulaşmaktan çekinmeyin. Linkedin.

okuduğunuz için teşekkürler !!

Bu makalede gösterilen medya Analytics Vidhya'ya ait değildir ve Yazarın takdirine bağlı olarak kullanılır.

spot_img

En Son İstihbarat

spot_img