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) โก
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 โข Data Training โข Usage โข 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.
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)
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. ๐ฎ๐ฉ