getTable(); $totalSiswa = User::whereIn('role', ['siswa', 'student'])->count(); if ($totalSiswa === 0) { $totalSiswa = RiwayatRekomendasi::distinct('user_id')->count('user_id'); } $totalRekomendasi = RiwayatRekomendasi::count(); $kolomAkurasi = null; if (Schema::hasColumn($tableName, 'akurasi_prediksi')) { $kolomAkurasi = 'akurasi_prediksi'; } elseif (Schema::hasColumn($tableName, 'probabilitas')) { $kolomAkurasi = 'probabilitas'; } elseif (Schema::hasColumn($tableName, 'akurasi')) { $kolomAkurasi = 'akurasi'; } $rataAkurasi = null; if ($kolomAkurasi) { $avg = RiwayatRekomendasi::whereNotNull($kolomAkurasi)->avg($kolomAkurasi); $rataAkurasi = $avg !== null ? round((float) $avg, 2) : null; } $akurasiStatus = $rataAkurasi !== null ? 'Berdasarkan rata-rata tingkat keyakinan dari seluruh hasil rekomendasi.' : 'Belum ada nilai keyakinan prediksi yang tersimpan. Lakukan prediksi baru terlebih dahulu.'; $selectDistribusi = 'hasil_rekomendasi_jurusan as jurusan, COUNT(*) as total'; if ($kolomAkurasi) { $selectDistribusi .= ', ROUND(AVG(' . $kolomAkurasi . '), 2) as rata_akurasi'; } $distribusiJurusan = RiwayatRekomendasi::selectRaw($selectDistribusi) ->whereNotNull('hasil_rekomendasi_jurusan') ->groupBy('hasil_rekomendasi_jurusan') ->orderBy('total', 'desc') ->limit(10) ->get() ->map(function ($item) use ($kolomAkurasi) { return [ 'jurusan' => $item->jurusan, 'total' => (int) $item->total, 'rata_akurasi' => $kolomAkurasi && $item->rata_akurasi !== null ? round((float) $item->rata_akurasi, 2) : null, ]; }); return response()->json([ 'success' => true, 'data' => [ 'total_siswa' => $totalSiswa, 'rekomendasi_diproses' => $totalRekomendasi, 'rata_rata_akurasi' => $rataAkurasi, 'akurasi_status' => $akurasiStatus, 'distribusi_jurusan' => $distribusiJurusan, ] ], 200); } catch (Exception $e) { return response()->json([ 'success' => false, 'message' => 'Error: ' . $e->getMessage() ], 500); } } }