Upload 4 files
Browse files- README.md +98 -0
- main.py +85 -0
- predict.py +30 -0
- risk_model.pkl +3 -0
README.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
🧠 Risk Prediction Classification Model
|
| 2 |
+
|
| 3 |
+
Bu loyiha foydalanuvchi kiritgan ma’lumotlarga asoslanib risk ehtimolini bashorat qiluvchi Machine Learning modelini o‘z ichiga oladi. Model Logistic Regression algoritmi yordamida o‘qitilgan va saqlangan model fayli orqali yangi ma’lumotlar uchun natija chiqaradi.
|
| 4 |
+
|
| 5 |
+
Loyiha o‘quv va tajriba maqsadida yaratilgan.
|
| 6 |
+
|
| 7 |
+
🚀 Imkoniyatlar
|
| 8 |
+
|
| 9 |
+
O‘qitilgan modelni yuklash
|
| 10 |
+
|
| 11 |
+
Foydalanuvchi kiritgan qiymatlar asosida bashorat qilish
|
| 12 |
+
|
| 13 |
+
Natijani 0 yoki 1 ko‘rinishida chiqarish
|
| 14 |
+
|
| 15 |
+
Risk ehtimolligini foizda ko‘rsatish
|
| 16 |
+
|
| 17 |
+
Terminal orqali interaktiv ishlash
|
| 18 |
+
|
| 19 |
+
📦 Texnologiyalar
|
| 20 |
+
|
| 21 |
+
Python
|
| 22 |
+
|
| 23 |
+
NumPy
|
| 24 |
+
|
| 25 |
+
Pandas
|
| 26 |
+
|
| 27 |
+
Scikit-learn
|
| 28 |
+
|
| 29 |
+
Joblib
|
| 30 |
+
|
| 31 |
+
📁 Loyiha tuzilishi
|
| 32 |
+
project/
|
| 33 |
+
│
|
| 34 |
+
├── risk_model.pkl # O‘qitilgan model
|
| 35 |
+
├── predict.py # Foydalanuvchi kiritib ishlatadigan dastur
|
| 36 |
+
├── main.py # Modelni o‘qitish kodi
|
| 37 |
+
└── README.md
|
| 38 |
+
|
| 39 |
+
⚙️ O‘rnatish
|
| 40 |
+
|
| 41 |
+
Kerakli kutubxonalarni o‘rnating:
|
| 42 |
+
|
| 43 |
+
pip install numpy pandas scikit-learn joblib
|
| 44 |
+
|
| 45 |
+
▶️ Ishga tushirish
|
| 46 |
+
|
| 47 |
+
Terminalda quyidagi buyruqni bajaring:
|
| 48 |
+
|
| 49 |
+
python predict.py
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
Dastur foydalanuvchidan quyidagi ma’lumotlarni so‘raydi:
|
| 53 |
+
|
| 54 |
+
yosh
|
| 55 |
+
|
| 56 |
+
oylik daromad
|
| 57 |
+
|
| 58 |
+
qarz miqdori
|
| 59 |
+
|
| 60 |
+
ish staji
|
| 61 |
+
|
| 62 |
+
Shundan so‘ng model bashorat natijasini chiqaradi.
|
| 63 |
+
|
| 64 |
+
🧩 Model qanday ishlaydi
|
| 65 |
+
|
| 66 |
+
Model Logistic Regression algoritmidan foydalanadi.
|
| 67 |
+
|
| 68 |
+
Natija quyidagicha talqin qilinadi:
|
| 69 |
+
|
| 70 |
+
0 → risk past
|
| 71 |
+
|
| 72 |
+
1 → risk yuqori
|
| 73 |
+
|
| 74 |
+
Ehtimollik qiymati ham chiqariladi.
|
| 75 |
+
|
| 76 |
+
Agar ehtimollik ≥ 0.5 → risk yuqori
|
| 77 |
+
Agar ehtimollik < 0.5 → risk past
|
| 78 |
+
|
| 79 |
+
💾 Modelni yuklab ishlatish misoli
|
| 80 |
+
import numpy as np
|
| 81 |
+
import joblib
|
| 82 |
+
|
| 83 |
+
loaded_model = joblib.load("risk_model.pkl")
|
| 84 |
+
|
| 85 |
+
sample = np.array([[30, 400, 3500, 1]])
|
| 86 |
+
prediction = loaded_model.predict(sample)
|
| 87 |
+
probability = loaded_model.predict_proba(sample)
|
| 88 |
+
|
| 89 |
+
print("Natija:", prediction)
|
| 90 |
+
print("Ehtimollik:", probability)
|
| 91 |
+
|
| 92 |
+
☁️ Modelni ulashish
|
| 93 |
+
|
| 94 |
+
Modelni internetda ulashish uchun Hugging Face platformasiga yuklash mumkin.
|
| 95 |
+
|
| 96 |
+
📌 Eslatma
|
| 97 |
+
|
| 98 |
+
Bu loyiha faqat o‘rganish va tajriba maqsadida yaratilgan. Natijalar real hayotiy qarorlar uchun ishlatilmasligi kerak.
|
main.py
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import numpy as np
|
| 2 |
+
import pandas as pd
|
| 3 |
+
import matplotlib.pyplot as plt
|
| 4 |
+
|
| 5 |
+
from sklearn.model_selection import train_test_split
|
| 6 |
+
from sklearn.linear_model import LogisticRegression
|
| 7 |
+
from sklearn.metrics import accuracy_score, confusion_matrix
|
| 8 |
+
import joblib
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
np.random.seed(42)
|
| 12 |
+
|
| 13 |
+
n_samples = 700
|
| 14 |
+
|
| 15 |
+
data = {
|
| 16 |
+
"age": np.random.randint(18, 65, n_samples),
|
| 17 |
+
"monthly_income": np.random.randint(200, 2000, n_samples),
|
| 18 |
+
"debt_amount": np.random.randint(0, 5000, n_samples),
|
| 19 |
+
"job_years": np.random.randint(0, 20, n_samples)
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
df = pd.DataFrame(data)
|
| 23 |
+
|
| 24 |
+
# Target (0 = to‘laydi, 1 = muammo bo‘lishi mumkin)
|
| 25 |
+
df["risk"] = (
|
| 26 |
+
(df["monthly_income"] < 500).astype(int) +
|
| 27 |
+
(df["debt_amount"] > 3000).astype(int) +
|
| 28 |
+
(df["job_years"] < 2).astype(int)
|
| 29 |
+
)
|
| 30 |
+
|
| 31 |
+
df["risk"] = (df["risk"] >= 2).astype(int)
|
| 32 |
+
|
| 33 |
+
print(df.head())
|
| 34 |
+
|
| 35 |
+
feature_cols = ["age", "monthly_income", "debt_amount", "job_years"]
|
| 36 |
+
|
| 37 |
+
X = df[feature_cols].values
|
| 38 |
+
y = df["risk"].values
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
X_train, X_test, y_train, y_test = train_test_split(
|
| 43 |
+
X, y, test_size=200, random_state=42, stratify=y
|
| 44 |
+
)
|
| 45 |
+
|
| 46 |
+
print("Train:", len(X_train))
|
| 47 |
+
print("Test:", len(X_test))
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
model = LogisticRegression(max_iter=1000)
|
| 52 |
+
model.fit(X_train, y_train)
|
| 53 |
+
|
| 54 |
+
y_pred = model.predict(X_test)
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
acc = accuracy_score(y_test, y_pred)
|
| 58 |
+
print("Accuracy:", acc)
|
| 59 |
+
|
| 60 |
+
cm = confusion_matrix(y_test, y_pred)
|
| 61 |
+
print("Confusion matrix:\n", cm)
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
plt.hist(model.predict_proba(X_test)[:,1], bins=20)
|
| 65 |
+
plt.xlabel("Risk ehtimoli")
|
| 66 |
+
plt.ylabel("Odamlar soni")
|
| 67 |
+
plt.title("Risk ehtimollari taqsimoti")
|
| 68 |
+
plt.show()
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
def predict_person(age, income, debt, job_years):
|
| 73 |
+
data = np.array([[age, income, debt, job_years]])
|
| 74 |
+
prob = model.predict_proba(data)[0][1]
|
| 75 |
+
pred = model.predict(data)[0]
|
| 76 |
+
return pred, prob
|
| 77 |
+
|
| 78 |
+
result, probability = predict_person(30, 400, 3500, 1)
|
| 79 |
+
|
| 80 |
+
print("Natija:", result)
|
| 81 |
+
print("Ehtimol:", probability)
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
joblib.dump(model, "risk_model.pkl")
|
| 85 |
+
print("Model saqlandi")
|
predict.py
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import numpy as np
|
| 2 |
+
import joblib
|
| 3 |
+
|
| 4 |
+
# 1. Modelni yuklash
|
| 5 |
+
loaded_model = joblib.load("risk_model.pkl")
|
| 6 |
+
|
| 7 |
+
print("=== Risk Bashorat Tizimi ===")
|
| 8 |
+
|
| 9 |
+
# 2. Foydalanuvchidan ma'lumot olish
|
| 10 |
+
age = int(input("Yoshni kiriting: "))
|
| 11 |
+
income = float(input("Oylik daromadni kiriting: "))
|
| 12 |
+
debt = float(input("Qarz miqdorini kiriting: "))
|
| 13 |
+
job_years = float(input("Ish staji (yil): "))
|
| 14 |
+
|
| 15 |
+
# 3. Modelga mos formatga o'tkazish
|
| 16 |
+
sample = np.array([[age, income, debt, job_years]])
|
| 17 |
+
|
| 18 |
+
# 4. Bashorat qilish
|
| 19 |
+
prediction = loaded_model.predict(sample)[0]
|
| 20 |
+
probability = loaded_model.predict_proba(sample)[0][1]
|
| 21 |
+
|
| 22 |
+
# 5. Natijani chiqarish
|
| 23 |
+
print("\n=== NATIJA ===")
|
| 24 |
+
|
| 25 |
+
if prediction == 1:
|
| 26 |
+
print("Risk yuqori bo‘lishi mumkin")
|
| 27 |
+
else:
|
| 28 |
+
print("Risk past")
|
| 29 |
+
|
| 30 |
+
print(f"Ehtimollik: {probability:.2f}")
|
risk_model.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:6be4e42680303e44c0648ceb65806f601b0cbe05a4ccf052e8f909ce7bd7c87a
|
| 3 |
+
size 895
|