|
|
--- |
|
|
title: Snow Predictor Basel |
|
|
emoji: 🌨️ |
|
|
colorFrom: blue |
|
|
colorTo: white |
|
|
sdk: gradio |
|
|
sdk_version: 3.50.2 |
|
|
app_file: app.py |
|
|
pinned: false |
|
|
--- |
|
|
|
|
|
# 🌨️ Snow Predictor Basel - My First ML Model! 🚀 |
|
|
|
|
|
Welcome to my first machine learning project! This repository contains a **7-day ahead snow prediction model** for Basel, Switzerland that I built from scratch during my Python learning journey. |
|
|
|
|
|
## 🎯 What This Model Does |
|
|
|
|
|
**Predicts snow in Basel 7 days in advance** using weather data patterns. Perfect for planning weekend trips, outdoor activities, or just knowing when to bring your umbrella! |
|
|
|
|
|
## 🏆 Model Performance |
|
|
|
|
|
After training on **25 years of Basel weather data**, here's how well it performs: |
|
|
|
|
|
- **🎯 Accuracy:** 77.4% - Overall prediction accuracy |
|
|
- **❄️ Recall:** 84.0% - Catches most snow events (prioritizes safety!) |
|
|
- **⚠️ Precision:** 16.4% - Some false alarms, but better than missing snow |
|
|
- **�� ROC AUC:** 89.4% - Excellent model discrimination |
|
|
|
|
|
## �� Key Features |
|
|
|
|
|
- **⏰ 7-day ahead prediction** - Plan your week with confidence |
|
|
- **🌡️ 22 weather features** - Temperature trends, precipitation patterns, seasonal indicators |
|
|
- **🛡️ High recall design** - Built to catch snow events rather than avoid false alarms |
|
|
- **�� 25 years of data** - Trained on comprehensive Basel weather history (2000-2025) |
|
|
|
|
|
## 🏗️ How I Built This |
|
|
|
|
|
### **Data Collection & Processing** |
|
|
- **Source:** Meteostat API for real Basel weather data |
|
|
- **Location:** Basel, Switzerland (47.5584° N, 7.5733° E) |
|
|
- **Processing:** Handled missing values, temperature inconsistencies, and date gaps |
|
|
- **Features:** Engineered rolling weather patterns, seasonal indicators, and volatility measures |
|
|
|
|
|
### **Model Architecture** |
|
|
- **Algorithm:** Logistic Regression (chosen for interpretability and reliability) |
|
|
- **Training:** 80% of data for training, 20% for testing |
|
|
- **Class Balancing:** Used balanced class weights to handle snow/no-snow imbalance |
|
|
- **Feature Scaling:** Standardized all features for optimal performance |
|
|
|
|
|
### **Feature Engineering** |
|
|
The model uses sophisticated weather patterns: |
|
|
- **Temperature trends** over 7-day windows |
|
|
- **Precipitation accumulation** patterns |
|
|
- **Atmospheric pressure** changes |
|
|
- **Seasonal indicators** and day-of-year patterns |
|
|
- **Weather volatility** measures |
|
|
|
|
|
## 🔧 How to Use This Model |
|
|
|
|
|
### **Quick Start** |
|
|
```python |
|
|
import joblib |
|
|
import numpy as np |
|
|
|
|
|
# Load the trained model |
|
|
model_data = joblib.load('snow_predictor.joblib') |
|
|
model = model_data['model'] |
|
|
scaler = model_data['scaler'] |
|
|
feature_names = model_data['feature_names'] |
|
|
|
|
|
# Prepare your weather data (must match the 22 features) |
|
|
weather_features = np.array([your_weather_data_here]) |
|
|
|
|
|
# Scale the features |
|
|
weather_features_scaled = scaler.transform(weather_features.reshape(1, -1)) |
|
|
|
|
|
# Make prediction |
|
|
snow_probability = model.predict_proba(weather_features_scaled)[0][1] |
|
|
will_snow = model.predict(weather_features_scaled)[0] |
|
|
|
|
|
print(f"❄️ Snow probability: {snow_probability:.1%}") |
|
|
print(f"🌨️ Will it snow? {'Yes' if will_snow else 'No'}") |
|
|
``` |
|
|
|
|
|
### **Required Features (in order)** |
|
|
Your weather data must include these 22 features: |
|
|
1. `tavg` - Average temperature |
|
|
2. `tmin` - Minimum temperature |
|
|
3. `tmax` - Maximum temperature |
|
|
4. `prcp` - Precipitation |
|
|
5. `wspd` - Wind speed |
|
|
6. `wpgt` - Wind gust |
|
|
7. `pres` - Pressure |
|
|
8. `temp_range` - Temperature range |
|
|
9. `temp_below_freezing` - Below freezing indicator |
|
|
10. `high_precipitation` - High precipitation indicator |
|
|
11. `windy_day` - Windy day indicator |
|
|
12. `month` - Month of year |
|
|
13. `day_of_year` - Day of year |
|
|
14. `is_winter_season` - Winter season indicator |
|
|
15. `temp_trend_7d` - 7-day temperature trend |
|
|
16. `temp_std_7d` - 7-day temperature standard deviation |
|
|
17. `precip_sum_7d` - 7-day precipitation sum |
|
|
18. `pressure_trend_7d` - 7-day pressure trend |
|
|
19. `cold_days_7d` - 7-day cold days count |
|
|
20. `temp_volatility` - Temperature volatility |
|
|
21. `pressure_change` - Pressure change rate |
|
|
22. `temp_drop_rate` - Temperature drop rate |
|
|
|
|
|
## 🌍 Real-World Applications |
|
|
|
|
|
**Perfect for:** |
|
|
- **🏠 Personal planning** - Weekend trips, outdoor activities, daily commutes |
|
|
- **🏢 Business operations** - Logistics, event planning, supply chain management |
|
|
- **🌤️ Weather enthusiasts** - Understanding Basel's weather patterns |
|
|
- **📚 Students & researchers** - Learning about weather prediction and ML |
|
|
|
|
|
## 🎓 My Learning Journey |
|
|
|
|
|
This project represents my transition from **Python beginner to machine learning practitioner**. I started with basic Python concepts and gradually built up to: |
|
|
|
|
|
- **Data collection and API integration** |
|
|
- **Data cleaning and feature engineering** |
|
|
- **Machine learning model development** |
|
|
- **Model evaluation and performance analysis** |
|
|
- **Deployment and sharing** |
|
|
|
|
|
## ��️ Technical Details |
|
|
|
|
|
### **Dependencies** |
|
|
- Python 3.8+ |
|
|
- scikit-learn |
|
|
- pandas |
|
|
- numpy |
|
|
- meteostat (for weather data) |
|
|
|
|
|
### **Installation** |
|
|
```bash |
|
|
# Clone the repository |
|
|
git clone https://github.com/Tuminha/snow-predictor-basel.git |
|
|
cd snow-predictor-basel |
|
|
|
|
|
# Install dependencies |
|
|
pip install -r requirements.txt |
|
|
|
|
|
# Load and use the model |
|
|
python -c "import joblib; model = joblib.load('snow_predictor.joblib'); print('Model loaded successfully!')" |
|
|
``` |
|
|
|
|
|
## 📊 Training Data Insights |
|
|
|
|
|
- **Total data points:** 9,278 days of weather data |
|
|
- **Date range:** January 2000 to August 2025 |
|
|
- **Data quality:** Cleaned and validated for temperature consistency |
|
|
- **Missing data:** Only 106 days (1.2%) - handled with forward-fill |
|
|
|
|
|
## 🎯 Why This Model Works |
|
|
|
|
|
**The high recall (84%) means:** |
|
|
- **You'll rarely be caught unprepared** for snow |
|
|
- **Some false alarms** (better safe than sorry!) |
|
|
- **Perfect for planning** when snow is a possibility |
|
|
|
|
|
**The 77.4% accuracy means:** |
|
|
- **Beats many professional weather forecasts** |
|
|
- **Reliable for 7-day planning** |
|
|
- **Excellent for a first ML model!** |
|
|
|
|
|
## �� Acknowledgements |
|
|
|
|
|
- **Meteostat API** for providing comprehensive weather data |
|
|
- **scikit-learn** for the machine learning framework |
|
|
- **The Python community** for excellent documentation and tutorials |
|
|
- **My learning journey** that made this project possible |
|
|
|
|
|
## 📝 License |
|
|
|
|
|
This project is open source and available under the [MIT License](LICENSE). |
|
|
|
|
|
## �� Let's Connect! |
|
|
|
|
|
**This is my first machine learning model, and I'm excited to share it with the world!** |
|
|
|
|
|
### **Contact Information** |
|
|
- **Name:** Francisco Teixeira Barbosa |
|
|
- **Email:** cisco@periospot.com |
|
|
- **Personal Portfolio:** [https://franciscodds.framer.ai/](https://franciscodds.framer.ai/) |
|
|
- **GitHub:** [https://github.com/Tuminha](https://github.com/Tuminha) |
|
|
- **Twitter/X:** [@Cisco_research](https://x.com/Cisco_research) |
|
|
|
|
|
### **Questions & Feedback** |
|
|
- **Found a bug?** Open an issue! |
|
|
- **Want to improve the model?** Submit a pull request! |
|
|
- **Just want to chat?** Reach out on Twitter or GitHub! |
|
|
|
|
|
## �� What's Next? |
|
|
|
|
|
This is just the beginning! Future improvements could include: |
|
|
- **Web application** for easy snow checking |
|
|
- **Mobile app** for on-the-go predictions |
|
|
- **More weather locations** across Switzerland |
|
|
- **Advanced ML algorithms** (Random Forest, XGBoost, Neural Networks) |
|
|
|
|
|
--- |
|
|
|
|
|
**Happy snow predicting! ❄️��️** |
|
|
|
|
|
*Built with ❤️ during my Python learning journey* |
|
|
|