hç
commited on
Upload 6 files
Browse files- .gitattributes +1 -0
- README.md +72 -1
- app.py +22 -0
- consumer_complaints_100k.csv +3 -0
- model.pkl +3 -0
- model.py +77 -0
- requirements.txt +3 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
consumer_complaints_100k.csv filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -1,3 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
README.md
|
| 2 |
+
|
| 3 |
+
# 📝 Consumer Complaint Classification with Machine Learning
|
| 4 |
+
|
| 5 |
+
Bu proje, tüketicilerin yazdığı şikayet metinlerini analiz ederek, hangi ürünle ilgili olduğunu otomatik olarak tahmin etmeyi amaçlayan bir doğal dil işleme (NLP) projesidir.
|
| 6 |
+
|
| 7 |
+
Makine öğrenmesi kullanılarak, tüketici şikayetlerinden `Product` sınıfı tahmin edilmiştir (örneğin: Mortgage, Credit Card, Bank Account).
|
| 8 |
+
|
| 9 |
---
|
| 10 |
+
|
| 11 |
+
## 📌 Proje Hedefi
|
| 12 |
+
|
| 13 |
+
Kullanıcının yazdığı şikayet metnine göre ilgili ürün kategorisini tahmin etmek.
|
| 14 |
+
Bu sayede müşteri hizmetlerinde sınıflandırma süreci otomatikleştirilebilir.
|
| 15 |
+
|
| 16 |
---
|
| 17 |
+
|
| 18 |
+
## 🧠 Kullanılan Yöntemler
|
| 19 |
+
|
| 20 |
+
1. **Veri Okuma ve Temizleme**
|
| 21 |
+
- İlk 100.000 satır kullanıldı (`consumer_complaints.csv`)
|
| 22 |
+
- Eksik (`NaN`) veriler çıkarıldı
|
| 23 |
+
- `Consumer complaint narrative` ve `Product` sütunları kullanıldı
|
| 24 |
+
|
| 25 |
+
2. **Doğal Dil İşleme (NLP)**
|
| 26 |
+
- TF-IDF vektörleştirme (en fazla 5000 kelime)
|
| 27 |
+
- İngilizce durak kelimeler çıkarıldı
|
| 28 |
+
|
| 29 |
+
3. **Model Eğitimi**
|
| 30 |
+
- Model: `Logistic Regression`
|
| 31 |
+
- Eğitim/Test oranı: %80 / %20
|
| 32 |
+
- Performans: `classification_report` ile ölçüldü
|
| 33 |
+
|
| 34 |
+
4. **Model Kaydı**
|
| 35 |
+
- Model + TF-IDF Vectorizer → `model.pkl` dosyasına kaydedildi
|
| 36 |
+
|
| 37 |
+
5. **Streamlit Uygulaması**
|
| 38 |
+
- Kullanıcıdan metin alır
|
| 39 |
+
- Model tahmini gösterir
|
| 40 |
+
- Anında çalıştırılabilir arayüz
|
| 41 |
+
|
| 42 |
+
---
|
| 43 |
+
|
| 44 |
+
## 🚀 Nasıl Çalıştırılır?
|
| 45 |
+
|
| 46 |
+
### 1. Gereksinimleri yükle
|
| 47 |
+
```bash
|
| 48 |
+
pip install -r requirements.txt
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
📦 Kullanılan Dosyalar
|
| 53 |
+
Dosya Açıklama
|
| 54 |
+
consumer_complaints_100k.csv Veri setinin ilk 100.000 satırı
|
| 55 |
+
model.py Model eğitimi ve .pkl kaydı
|
| 56 |
+
model.pkl Eğitilmiş model ve TF-IDF
|
| 57 |
+
app.py Streamlit kullanıcı arayüzü
|
| 58 |
+
requirements.txt Gerekli kütüphaneler listesi
|
| 59 |
+
README.md Proje açıklaması
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
🧪 Örnek Kullanım
|
| 64 |
+
|
| 65 |
+
I was charged extra fees and my credit card was closed without notice.
|
| 66 |
+
Tahmini ürün:
|
| 67 |
+
Credit card or prepaid card
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
Eğitim Amacı
|
| 71 |
+
Bu proje eğitim amacıyla geliştirilmiştir. Gerçek dünyada kullanılmadan önce daha büyük veri ile model iyileştirme, sınıf dengesizliği çözümü, ileri NLP teknikleri ve hiperparametre optimizasyonu yapılması önerilir
|
| 72 |
+
|
| 73 |
+
🪪 Lisans
|
| 74 |
+
MIT License
|
app.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import pickle
|
| 3 |
+
|
| 4 |
+
# Model ve TF-IDF yükle
|
| 5 |
+
with open("model.pkl", "rb") as f:
|
| 6 |
+
model, vectorizer = pickle.load(f)
|
| 7 |
+
|
| 8 |
+
st.title("📝 Consumer Complaint Classifier")
|
| 9 |
+
st.subheader("Tahmin Et: Bu şikayet hangi ürünle ilgili?")
|
| 10 |
+
|
| 11 |
+
# Kullanıcıdan şikayet metni al
|
| 12 |
+
complaint_text = st.text_area("Şikayet metnini buraya yazın...")
|
| 13 |
+
|
| 14 |
+
if st.button("Tahmin Et"):
|
| 15 |
+
if complaint_text.strip() == "":
|
| 16 |
+
st.warning("Lütfen bir metin girin.")
|
| 17 |
+
else:
|
| 18 |
+
# TF-IDF ile dönüştür
|
| 19 |
+
input_vec = vectorizer.transform([complaint_text])
|
| 20 |
+
# Tahmin yap
|
| 21 |
+
prediction = model.predict(input_vec)[0]
|
| 22 |
+
st.success(f"📦 Tahmini Ürün: **{prediction}**")
|
consumer_complaints_100k.csv
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ca6993cf249a8ef1f57461ed74669319ffb0f7ce7ad995ec668b6b996ec0ce35
|
| 3 |
+
size 41279771
|
model.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a6937cc690c11afe5ea7bcb4fc253d98acece7d750897ebceb1d390a0c63381a
|
| 3 |
+
size 866827
|
model.py
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
import pandas as pd
|
| 15 |
+
from sklearn.model_selection import train_test_split
|
| 16 |
+
from sklearn.feature_extraction.text import TfidfVectorizer
|
| 17 |
+
from sklearn.linear_model import LogisticRegression
|
| 18 |
+
from sklearn.metrics import classification_report
|
| 19 |
+
import pickle
|
| 20 |
+
|
| 21 |
+
# 1. Veri yükleme
|
| 22 |
+
df = pd.read_csv("consumer_complaints_100k.csv")
|
| 23 |
+
|
| 24 |
+
# 2. Sütun adlarını düzelt
|
| 25 |
+
df.columns = df.columns.str.strip()
|
| 26 |
+
|
| 27 |
+
# 3. Gerekli sütunları seç (Boş olmayanlar)
|
| 28 |
+
df = df[['Consumer complaint narrative', 'Product']].dropna()
|
| 29 |
+
|
| 30 |
+
# 4. Giriş ve hedef verileri ayır
|
| 31 |
+
X = df['Consumer complaint narrative']
|
| 32 |
+
y = df['Product']
|
| 33 |
+
|
| 34 |
+
# 5. TF-IDF vektörleştirici
|
| 35 |
+
vectorizer = TfidfVectorizer(stop_words='english', max_features=5000)
|
| 36 |
+
X_vec = vectorizer.fit_transform(X)
|
| 37 |
+
|
| 38 |
+
# 6. Eğitim / test bölmesi
|
| 39 |
+
X_train, X_test, y_train, y_test = train_test_split(X_vec, y, test_size=0.2, random_state=42)
|
| 40 |
+
|
| 41 |
+
# 7. Model oluştur ve eğit
|
| 42 |
+
model = LogisticRegression(max_iter=1000)
|
| 43 |
+
model.fit(X_train, y_train)
|
| 44 |
+
|
| 45 |
+
# 8. Performans raporu
|
| 46 |
+
y_pred = model.predict(X_test)
|
| 47 |
+
print("\nClassification Report:\n")
|
| 48 |
+
print(classification_report(y_test, y_pred))
|
| 49 |
+
|
| 50 |
+
# 9. Model ve vectorizer'ı kaydet
|
| 51 |
+
with open("model.pkl", "wb") as f:
|
| 52 |
+
pickle.dump((model, vectorizer), f)
|
| 53 |
+
|
| 54 |
+
print("\n✅ Model başarıyla eğitildi ve 'model.pkl' dosyasına kaydedildi.")
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
# İlk 100.000 satırı kullanır
|
| 68 |
+
|
| 69 |
+
# Sütun isimlerini düzeltir
|
| 70 |
+
|
| 71 |
+
# Eksik verileri temizler
|
| 72 |
+
|
| 73 |
+
# TF-IDF ile metni sayısallaştırır
|
| 74 |
+
|
| 75 |
+
# Logistic Regression ile model eğitir
|
| 76 |
+
|
| 77 |
+
# Modeli ve TF-IDF vektörizerini .pkl dosyasına kaydeder
|
requirements.txt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
streamlit
|
| 2 |
+
pandas
|
| 3 |
+
scikit-learn
|