Spaces:
Sleeping
Sleeping
hç
commited on
Upload 4 files
Browse files- README.md +36 -20
- app.py +49 -0
- project_description.txt +61 -0
- requirements.txt +5 -3
README.md
CHANGED
@@ -1,20 +1,36 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# 🔥 Heat Flux ML Regression – CHF Tahmin Uygulaması
|
2 |
+
|
3 |
+
Bu proje, deneysel mühendislik verilerini kullanarak **kritik ısı akısını (CHF)** tahmin eden bir makine öğrenmesi modelini içermektedir. Uygulama **Streamlit** ile oluşturulmuş ve kullanıcı dostu bir arayüz sunmaktadır.
|
4 |
+
|
5 |
+
## 📦 Kullanılan Veri Seti
|
6 |
+
- Kaggle Playground Series S3E15
|
7 |
+
- [Veri Seti Bağlantısı](https://www.kaggle.com/competitions/playground-series-s3e15/data)
|
8 |
+
|
9 |
+
## 🎯 Hedef
|
10 |
+
Verilen deneysel koşullar (basınç, kütle akısı, boru geometrisi vb.) altında oluşan `chf_exp [MW/m2]` değerini tahmin etmek.
|
11 |
+
|
12 |
+
## 🧠 Kullanılan Model
|
13 |
+
- Random Forest Regressor
|
14 |
+
- RMSE: ~1.73, R²: ~0.27
|
15 |
+
|
16 |
+
## ⚙️ Gerekli Dosyalar
|
17 |
+
- `rf_model.pkl`: Eğitilmiş model
|
18 |
+
- `model_columns.pkl`: One-hot encoded sütun listesi
|
19 |
+
- `app.py`: Streamlit arayüzü
|
20 |
+
|
21 |
+
Uygulama Ekranı
|
22 |
+
Kullanıcıdan deneysel koşullar alınır ve tahmini CHF değeri hesaplanır.
|
23 |
+
|
24 |
+
Geliştirilebilir Noktalar
|
25 |
+
LightGBM, XGBoost gibi daha güçlü modeller denenebilir.
|
26 |
+
|
27 |
+
Hyperparameter tuning yapılabilir.
|
28 |
+
|
29 |
+
Feature engineering (etkileşimli sütunlar) geliştirilebilir.
|
30 |
+
⚠️ Bu proje eğitim amaçlıdır.
|
31 |
+
|
32 |
+
## 🚀 Uygulamayı Çalıştırmak
|
33 |
+
```bash
|
34 |
+
pip install -r requirements.txt
|
35 |
+
streamlit run app.py
|
36 |
+
|
app.py
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import pandas as pd
|
3 |
+
import numpy as np
|
4 |
+
import joblib
|
5 |
+
|
6 |
+
# 🎯 Başlık
|
7 |
+
st.title("💥 CHF (Kritik Isı Akısı) Tahmini")
|
8 |
+
st.write("Bu uygulama, deneysel koşullara göre kritik ısı akısını (chf_exp) tahmin eder.")
|
9 |
+
|
10 |
+
# 🎯 Giriş Değerleri
|
11 |
+
author = st.selectbox("Yazar", ["Thompson", "Beus", "Other"])
|
12 |
+
geometry = st.selectbox("Geometri", ["tube", "annulus", "Other"])
|
13 |
+
pressure = st.number_input("Basınç [MPa]", min_value=0.0, max_value=30.0, value=10.0)
|
14 |
+
mass_flux = st.number_input("Kütle Akısı [kg/m2-s]", min_value=0.0, max_value=10000.0, value=2000.0)
|
15 |
+
x_e_out = st.number_input("Çıkış Buhar Kalitesi (x_e_out)", value=0.1)
|
16 |
+
D_e = st.number_input("Dış Çap [mm] (D_e)", value=10.0)
|
17 |
+
D_h = st.number_input("Hidrolik Çap [mm] (D_h)", value=10.0)
|
18 |
+
length = st.number_input("Boru Uzunluğu [mm]", value=1000.0)
|
19 |
+
|
20 |
+
# 🎯 Veriyi DataFrame'e çevir
|
21 |
+
input_data = pd.DataFrame({
|
22 |
+
"author": [author],
|
23 |
+
"geometry": [geometry],
|
24 |
+
"pressure [MPa]": [pressure],
|
25 |
+
"mass_flux [kg/m2-s]": [mass_flux],
|
26 |
+
"x_e_out [-]": [x_e_out],
|
27 |
+
"D_e [mm]": [D_e],
|
28 |
+
"D_h [mm]": [D_h],
|
29 |
+
"length [mm]": [length]
|
30 |
+
})
|
31 |
+
|
32 |
+
# ⚙️ One-hot encode
|
33 |
+
input_data = pd.get_dummies(input_data)
|
34 |
+
|
35 |
+
# Eğitim setinde olup testte olmayan sütunları ekle
|
36 |
+
model_columns = joblib.load("model_columns.pkl") # Kaydetmemiz gerekiyor
|
37 |
+
for col in model_columns:
|
38 |
+
if col not in input_data.columns:
|
39 |
+
input_data[col] = 0
|
40 |
+
|
41 |
+
input_data = input_data[model_columns]
|
42 |
+
|
43 |
+
# 🎯 Modeli yükle
|
44 |
+
model = joblib.load("rf_model.pkl")
|
45 |
+
|
46 |
+
# 🧠 Tahmin et
|
47 |
+
if st.button("Tahmin Et"):
|
48 |
+
prediction = model.predict(input_data)[0]
|
49 |
+
st.success(f"Tahmin Edilen CHF Değeri: {prediction:.2f} MW/m2")
|
project_description.txt
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Proje Adı:
|
2 |
+
Tahmini Kritik Isı Akısı (CHF) – Makine Öğrenimi ile Regresyon Modeli
|
3 |
+
|
4 |
+
# Proje Türü:
|
5 |
+
Regresyon – Sayısal Değer Tahmini
|
6 |
+
|
7 |
+
# Veri Seti:
|
8 |
+
Kaggle - Playground Series S3E15
|
9 |
+
URL: https://www.kaggle.com/competitions/playground-series-s3e15/data
|
10 |
+
|
11 |
+
# Veri Özeti:
|
12 |
+
Veri seti, nükleer mühendislik alanındaki bir çalışmadan alınan deneysel gözlemleri içerir. Her satır bir deneysel koşulu (yazar, boru çapı, basınç, buhar kalitesi, vb.) temsil eder. Hedef değişken `chf_exp [MW/m2]` yani kritik ısı akısıdır. Bu değer, sistemin çökmesine neden olabilecek sınırdaki ısı yükünü belirtir.
|
13 |
+
|
14 |
+
# Kullanılan Kütüphaneler:
|
15 |
+
- pandas
|
16 |
+
- numpy
|
17 |
+
- scikit-learn
|
18 |
+
- seaborn, matplotlib
|
19 |
+
- streamlit
|
20 |
+
- joblib
|
21 |
+
|
22 |
+
# Aşamalar:
|
23 |
+
|
24 |
+
1. 📥 Veri Keşfi (EDA):
|
25 |
+
- Eksik veriler analiz edildi.
|
26 |
+
- Korelasyon matrisi çıkarıldı.
|
27 |
+
- `mass_flux`, `x_e_out`, `pressure`, `length` gibi özelliklerin hedef değişkenle korelasyonu yüksek bulundu.
|
28 |
+
|
29 |
+
2. 🧹 Veri Ön İşleme:
|
30 |
+
- Sayısal sütunlardaki eksik veriler ortalama (mean) ile dolduruldu.
|
31 |
+
- Kategorik sütunlar (author, geometry) mod ile dolduruldu.
|
32 |
+
- `id` sütunu modelden çıkarıldı.
|
33 |
+
- One-hot encoding uygulandı.
|
34 |
+
|
35 |
+
3. 🧠 Modelleme:
|
36 |
+
- `RandomForestRegressor` ile temel bir regresyon modeli kuruldu.
|
37 |
+
- Eğitim ve test ayrımı %80-%20 olarak yapıldı.
|
38 |
+
- RMSE: 1.73 – R²: 0.27 → Model zayıf da olsa anlamlı ilişkiler kurabildi.
|
39 |
+
|
40 |
+
4. 📈 Test Tahmin ve Submission:
|
41 |
+
- Test verisi doldurularak modele verildi.
|
42 |
+
- `sample_submission.csv` formatında tahmin sonuçları oluşturuldu.
|
43 |
+
|
44 |
+
5. 🌐 Streamlit Arayüzü:
|
45 |
+
- Kullanıcının manuel olarak giriş yapabileceği bir arayüz geliştirildi.
|
46 |
+
- Girdi olarak basınç, kütle akısı, boru uzunluğu gibi değerler alınıp CHF tahmini döndürüldü.
|
47 |
+
- Model `.pkl` dosyasından yüklendi, `model_columns.pkl` ile one-hot encoding uyumlandırıldı.
|
48 |
+
|
49 |
+
# Geliştirilebilir Alanlar:
|
50 |
+
- LightGBM veya XGBoost gibi daha güçlü algoritmalarla model geliştirilebilir.
|
51 |
+
- Feature engineering yapılabilir (örneğin: çap oranı, enerji yoğunluğu gibi yeni değişkenler).
|
52 |
+
- RMSE’yi düşürmek için hiperparametre optimizasyonu denenebilir.
|
53 |
+
|
54 |
+
# Çıktılar:
|
55 |
+
- submission.csv (tahmin sonuçları)
|
56 |
+
- rf_model.pkl (eğitilmiş model)
|
57 |
+
- model_columns.pkl (kullanılan özellik listesi)
|
58 |
+
- app.py (Streamlit uygulaması)
|
59 |
+
|
60 |
+
# Proje Amacı:
|
61 |
+
Bu proje, regresyon problemlerinde veri ön işleme, eksik veri doldurma, model eğitimi ve Streamlit arayüzü kurma gibi tam uçtan uca bir makine öğrenmesi sürecini içermektedir. Özellikle mühendislik uygulamaları için modelleme pratiği kazanmak isteyenler için uygundur.
|
requirements.txt
CHANGED
@@ -1,3 +1,5 @@
|
|
1 |
-
|
2 |
-
pandas
|
3 |
-
|
|
|
|
|
|
1 |
+
streamlit
|
2 |
+
pandas
|
3 |
+
numpy
|
4 |
+
scikit-learn
|
5 |
+
joblib
|