| --- |
| 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](#-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.* ๐ฎ๐ฉ |
|
|