POSEIDON / Phase_0 /README.md
JullMol's picture
Initial commit: Uploading POSEIDON Pipeline (Phase 0 & Phase 4)
4cba5e1 verified
|
Raw
History Blame Contribute Delete
3.84 kB
---
license: mit
tags:
- regression
- tabular-regression
- scikit-learn
- statsmodels
- fisheries
- vessel-length-estimation
datasets:
- custom
---
# ๐ŸŒŠ POSEIDON: Phase 0
โšก Prediksi Length Kapal Ikan dari Gross Tonnage (GT) โšก
![Python](https://img.shields.io/badge/Python-3.10%2B-blue) ![Statsmodels](https://img.shields.io/badge/Statsmodels-0.14%2B-brightgreen) ![Scikit-Learn](https://img.shields.io/badge/Scikit--Learn-1.3%2B-blue) ![Hugging Face](https://img.shields.io/badge/Hugging%20Face-Ready-yellow)
Sistem regresi untuk mengestimasi panjang (*Length*, dalam meter) kapal ikan berdasarkan nilai *Gross Tonnage* (GT). Model ini dilatih dari data gabungan **Global Fishing Watch (GFW) Vessels API** dan **EU Fleet Register**, sebagai bagian dari tahap awal (Phase 0) *pipeline* POSEIDON (Patrol Oriented SAR Enabled IUU Detection Over Indonesian Natuna).
[Model Details](#-model-details) โ€ข [Data Training](#-data-training) โ€ข [Usage](#-cara-pakai) โ€ข [Contributors](#-contributors)
---
## ๐ŸŽฏ Model Details
Model dipilih otomatis dengan membandingkan RMSE antara dua kandidat formula (*Linear Regression* dan *Log-Log Power Regression*) pada data uji, lalu di-*fit* ulang dengan OLS (*statsmodels*) pada keseluruhan data untuk formula final.
- **Tipe model**: `log_log_power_regression`
- **Formula**: `Length = a * GT^b`
- **Koefisien**: `{"a": 5.7251, "b": 0.3088}`
- **Fitur input**: GT (*Gross Tonnage*)
- **Target output**: Length (meter)
- **R-squared**: 0.9491
- **Jumlah observasi training**: 79,902
---
## ๐Ÿ“Š Data Training
- **Sumber**: Global Fishing Watch Vessels API (`public-global-vessel-identity:latest`) & EU Fleet Register
- **Jumlah baris bersih**: 79,902 (duplikat dihapus, nilai non-positif dibuang, outlier 1%โ€“99% persentil dipotong)
- **Rentang GT & Length**: Sesuai dengan distribusi kapal perikanan standar pada dataset GFW.
---
## ๐Ÿ“ Repository Structure (Phase 0)
| Berkas | Deskripsi |
|---|---|
| `poseidon_length_model.pkl` | Objek model asli (statsmodels OLS), dimuat dengan `joblib.load()` |
| `model_config.json` | Koefisien model dalam format ringan, tanpa *dependency* |
| `predict.py` | Script mandiri untuk prediksi memakai `model_config.json` |
| `POSEIDON_training_dataset_Length_Regression.xlsx` | Dataset final (GT, Length) yang dipakai untuk training |
---
## ๐Ÿš€ Cara Pakai
### Opsi 1: Tanpa *dependency* (Disarankan)
Pendekatan ini sangat ringan karena hanya membutuhkan Python bawaan dan `model_config.json`.
```python
import json
with open("model_config.json") as f:
cfg = json.load(f)
def predict_length(gt_value, cfg):
coef = cfg["coefficients"]
if cfg["model_type"] == "log_log_power_regression":
return coef["a"] * (gt_value ** coef["b"])
return coef["intercept"] + coef["slope"] * gt_value
# Contoh prediksi untuk kapal dengan GT 150
print(predict_length(150, cfg))
```
### Opsi 2: Dengan `statsmodels` (Objek model asli)
```python
import joblib
model = joblib.load("poseidon_length_model.pkl")
# Sesuaikan input dengan kebutuhan (misal log GT dan constant)
# print(model.predict([1, 150]))
```
---
## โš ๏ธ Keterbatasan
- Model hanya memakai satu fitur tunggal (GT), tidak memperhitungkan jenis alat tangkap (*geartype*), bendera negara, atau desain spesifik kapal.
- Prediksi pada nilai GT yang jauh melampaui rentang *training* bersifat ekstrapolasi dan berisiko kurang andal.
- Data GT dan Length bersumber dari registri publik internasional yang mungkin mengandung *noise* pelaporan.
---
## ๐Ÿ‘จโ€๐Ÿ’ป Contributors
Dipersembahkan oleh Tim Mahasiswa dari **Universitas Negeri Surabaya**:
- **Faishal Muflih Irfanu Tsaqib**
- **Daffa Ahmad Pangreksa**
- **Dimas Rafi Izzulhaq**
*Dibuat untuk mendukung penjagaan kedaulatan maritim dan kelestarian sumber daya laut Indonesia.* ๐Ÿ‡ฎ๐Ÿ‡ฉ