{"id":29856407,"url":"https://github.com/martingit2/aiportal-ml-service","last_synced_at":"2026-04-09T23:55:21.905Z","repository":{"id":306202658,"uuid":"1012361342","full_name":"martingit2/AiPortal-ML-Service","owner":"martingit2","description":"ML-mikrotjeneste for Aracanix. En Python/Flask-app som trener og serverer XGBoost-modeller for prediktiv analyse. Se README for lenker til frontend og backend.","archived":false,"fork":false,"pushed_at":"2025-07-24T06:09:14.000Z","size":947,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-24T10:05:42.275Z","etag":null,"topics":["flask","fullstack","machine-learning","microservices","pandas","python","scikit-learn","xgboost"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/martingit2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-02T08:07:40.000Z","updated_at":"2025-07-24T06:09:18.000Z","dependencies_parsed_at":"2025-07-24T10:05:48.269Z","dependency_job_id":"52c31a7a-d30c-4291-8cc3-d997f99459ad","html_url":"https://github.com/martingit2/AiPortal-ML-Service","commit_stats":null,"previous_names":["martingit2/aiportal-ml-service"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/martingit2/AiPortal-ML-Service","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martingit2%2FAiPortal-ML-Service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martingit2%2FAiPortal-ML-Service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martingit2%2FAiPortal-ML-Service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martingit2%2FAiPortal-ML-Service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/martingit2","download_url":"https://codeload.github.com/martingit2/AiPortal-ML-Service/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martingit2%2FAiPortal-ML-Service/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267780497,"owners_count":24143204,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flask","fullstack","machine-learning","microservices","pandas","python","scikit-learn","xgboost"],"created_at":"2025-07-29T23:36:51.777Z","updated_at":"2026-04-09T23:55:16.883Z","avatar_url":"https://github.com/martingit2.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aracanix Analyseplattform\n\n\n\nVelkommen til **Aracanix**, en fullstack analyse- og beslutningsstøtteplattform utviklet som et omfattende læringsprosjekt. Målet er å utforske hele livssyklusen til data – fra innsamling og prosessering til avansert analyse med maskinlæring – for å identifisere potensielle \"edges\" i datadrevne markeder.\n\nDette prosjektet er delt inn i tre separate repositories som utgjør en komplett, fungerende applikasjon:\n\n*   **Frontend:** [martingit2/AiPortal-Frontend](https://github.com/martingit2/AiPortal-Frontend) \n*   **Backend:** [martingit2/AiPortal-Backend](https://github.com/martingit2/AiPortal-Backend) \n*   **ML Service:** [martingit2/AiPortal-ML-Service](https://github.com/martingit2/AiPortal-ML-Service) (Denne repoen)\n\n---\n\n## Innholdsfortegnelse\n\n- [Om Prosjektet](#om-prosjektet)\n    - [Prosjektstatus og Formål](#prosjektstatus-og-formål)\n    - [Hovedfunksjoner](#hovedfunksjoner)\n    - [Teknologistack](#teknologistack)\n- [Visuell Oversikt](#visuell-oversikt)\n- [Prosjektstruktur](#prosjektstruktur)\n    - [Frontend (`aracanix-frontend`)](#frontend-aracanix-frontend-1)\n    - [Backend (`Aracanix-Backend`)](#backend-aracanix-backend-1)\n    - [ML Service (`aracanix-ml-service`)](#ml-service-aracanix-ml-service-1)\n- [Komme i Gang](#komme-i-gang)\n    - [Forutsetninger](#forutsetninger)\n    - [Installasjon og Kjøring](#installasjon-og-kjøring)\n- [Lisens](#lisens)\n\n---\n\n## Om Prosjektet\n\nPer i dag er plattformen primært fokusert på **sportsanalyse og betting**, men arkitekturen er designet for å være modulær og utvidbar til andre domener som aksjer og krypto i fremtiden.\n\n### Prosjektstatus og Formål\n\n**Dette er et aktivt læringsprosjekt under utvikling.** Hensikten er å bygge og forstå en komplett, moderne systemarkitektur.\n\n*   **Ikke alle funksjoner er implementert:** Funksjoner som \"Modeller\"-siden, \"Innstillinger\", og analyse for aksjer/krypto er foreløpig kun plassholdere som representerer fremtidsvisjonen for prosjektet.\n*   **Modellene er for demonstrasjon:** Prediksjonsmodellene er ment som en \"proof-of-concept\" for den tekniske pipelinen og er **ikke** presise eller pålitelige nok for reelle finansielle beslutninger.\n\n### Hovedfunksjoner (Implementert)\n\n-   **Avansert Datainnhenting:** En robust, kø-basert backend i Java (Spring Boot) orkestrerer datainnhenting fra flere eksterne API-er, inkludert kampdata, spillerstatistikk, odds og sosiale medier (Twitter).\n-   **Maskinlærings-pipeline:** En dedikert mikrotjeneste i Python (Flask/XGBoost) trener og serverer prediksjonsmodeller for ulike markeder, som kampvinner og Over/Under, beriket med Head-to-Head (H2H) data.\n-   **Interaktivt Dashboard:** Et moderne React-dashboard lar brukeren administrere datainnsamlere (\"boter\"), utforske innsamlet data og visualisere resultatene av analysene.\n-   **Dynamisk Datavisning:** Viser komplekse data som ligatabeller, kampresultater, spillerstatistikk og H2H-data på en intuitiv og oversiktlig måte.\n-   **Sikker Autentisering:** Full bruker- og sesjonshåndtering er implementert med Clerk.\n\n### Teknologistack\n\n-   **Frontend:** React, TypeScript, Vite, React Router, Recharts, CSS Modules.\n-   **Backend:** Java 21, Spring Boot, Spring Data JPA, Spring Security (OAuth2), WebClient, Project Reactor.\n-   **ML Service:** Python, Flask, Pandas, Scikit-learn, XGBoost.\n-   **Database:** PostgreSQL (hostet på Supabase).\n-   **Autentisering:** Clerk.\n\n---\n\n## Visuell Oversikt\n\nHer er noen glimt fra plattformens ulike funksjoner, som viser administrasjon av datakilder, analyse av resultater og visualisering av data.\n\n| Bot-administrasjon (CRUD) | Ligatabeller med Drill-Down |\n| :----------------------------------------------------------: | :----------------------------------------------------------: |\n| ![Bilde av bot-administrasjonssiden](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/boter.png) | ![Bilde av fotball-stats siden](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/fotball-stats.png) |\n| **Oddsanalyse \u0026 Verdispill**                             | **Detaljert Spillerstatistikk**                     |\n| ![Bilde av oddsanalyse-siden](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/odds-analyse.png)        | ![Bilde av spillerstatistikk-modalen](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/spiller-stats.png) |\n| **Interaktiv Form-analyse**                                         | **Oversikt over Tilgjengelig Odds**                               |\n| ![Bilde av lagdetaljer-siden med graf](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/lagdetaljer.png) | ![Bilde av odds-oversikt modalen](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/odds.png) |\n| **Porteføljeoversikt** | **Administrasjon av Porteføljespill** |\n| ![Bilde av porteføljeoversikt](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/portfolio.png) | ![Bilde av spesifikke spill i porteføljen](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/portfoliobets.png) |\n| **Prediksjonsmodeller** | **Utvidet Odds-visning** |\n| ![Bilde av oversikt over modeller](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/modeller.png) | ![Bilde av utvidet odds-visning](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/merodds.png) |\n| **Discord-varsler** | **Kampoversikt** |\n| ![Bilde av Discord-varsler](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/discordbot.png) | ![Bilde av kampoversikt](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/fixtures.png) |\n| **Detaljert Lagstatistikk** | **Detaljer om Modeller** |\n| ![Bilde av lagstatistikk](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/lag-stats.png) | ![Bilde av modelldetaljer](https://raw.githubusercontent.com/martingit2/AiPortal-Frontend/main/src/bilder/modelldetaljer.png) |\n\n\n---\n\n## Prosjektstruktur\n\n### Frontend (`aracanix-frontend`)\n\n```\nsrc\n├── App.css\n├── App.tsx\n├── index.css\n├── main.tsx\n├── bilder/\n│   ├── DATA1.png\n│   └── DATA2.png\n├── components/\n│   ├── CreateBotModal.css\n│   ├── CreateBotModal.tsx\n│   ├── MatchStatsModal.css\n│   ├── MatchStatsModal.tsx\n│   ├── OddsDetailModal.css\n│   ├── OddsDetailModal.tsx\n│   ├── Searchbar.css\n│   ├── Searchbar.tsx\n│   ├── Sidebar.css\n│   ├── Sidebar.tsx\n│   ├── TeamFormChart.css\n│   └── TeamFormChart.tsx\n├── layouts/\n│   ├── DashboardLayout.css\n│   └── DashboardLayout.tsx\n├── pages/\n│   ├── LandingPage.css\n│   ├── LandingPage.tsx\n│   └── dashboard/\n│       ├── AnalysesPage.css\n│       ├── AnalysesPage.tsx\n│       ├── BotsPage.css\n│       ├── BotsPage.tsx\n│       ├── DashboardPage.css\n│       ├── DashboardPage.tsx\n│       ├── DataFeedPage.css\n│       ├── DataFeedPage.tsx\n│       ├── FixturesPage.css\n│       ├── FixturesPage.tsx\n│       ├── FootballStatsPage.css\n│       ├── FootballStatsPage.tsx\n│       ├── OddsAnalysisPage.css\n│       ├── OddsAnalysisPage.tsx\n│       ├── TeamDetailsPage.css\n│       ├── TeamDetailsPage.tsx\n│       ├── UpcomingOddsPage.css\n│       └── UpcomingOddsPage.tsx\n└── types/\n    └── index.ts\n```\n\n### Backend (`Aracanix-Backend`)\n\n```\nsrc/main/java/com/AiPortal\n├── Demo1Application.java\n├── config/\n│   ├── DataSourceConfig.java\n│   └── SecurityConfig.java\n├── controller/\n│   ├── AdminController.java\n│   ├── AnalysisController.java\n│   ├── BotController.java\n│   ├── FixtureController.java\n│   ├── HelloController.java\n│   ├── StatisticsController.java\n│   ├── TrainingDataController.java\n│   ├── TweetController.java\n│   └── ValueBetsController.java\n├── dto/\n│   ├── HeadToHeadStatsDto.java\n│   ├── LeagueStatsGroupDto.java\n│   ├── MatchOddsDto.java\n│   ├── MatchStatisticsDto.java\n│   ├── ParsedTweetResponse.java\n│   ├── PlayerMatchStatisticsDto.java\n│   ├── TeamDetailsDto.java\n│   ├── TeamStatisticsDto.java\n│   ├── TrainingDataDto.java\n│   ├── TweetDto.java\n│   ├── UpcomingFixtureDto.java\n│   └── ValueBetDto.java\n├── entity/\n│   ├── Analysis.java\n│   ├── BetType.java\n│   ├── Bookmaker.java\n│   ├── BotConfiguration.java\n│   ├── Fixture.java\n│   ├── HeadToHeadStats.java\n│   ├── Injury.java\n│   ├── League.java\n│   ├── MatchOdds.java\n│   ├── MatchStatistics.java\n│   ├── PendingFixtureChunk.java\n│   ├── Player.java\n│   ├── PlayerMatchStatistics.java\n│   ├── RawTweetData.java\n│   ├── TeamStatistics.java\n│   ├── TestEntity.java\n│   └── TwitterQueryState.java\n├── repository/\n│   ├── AnalysisRepository.java\n│   ├── BetTypeRepository.java\n│   ├── BookmakerRepository.java\n│   ├── BotConfigurationRepository.java\n│   ├── FixtureRepository.java\n│   ├── HeadToHeadStatsRepository.java\n│   ├── InjuryRepository.java\n│   ├── LeagueRepository.java\n│   ├── MatchOddsRepository.java\n│   ├── MatchStatisticsRepository.java\n│   ├── PendingFixtureChunkRepository.java\n│   ├── PlayerMatchStatisticsRepository.java\n│   ├── PlayerRepository.java\n│   ├── RawTweetDataRepository.java\n│   ├── TeamStatisticsRepository.java\n│   ├── TestRepository.java\n│   └── TwitterQueryStateRepository.java\n└── service/\n    ├── AnalysisService.java\n    ├── BotConfigurationService.java\n    ├── FixtureService.java\n    ├── FootballApiService.java\n    ├── HistoricalDataWorker.java\n    ├── OddsCalculationService.java\n    ├── PinnacleApiService.java\n    ├── PredictionService.java\n    ├── ScheduledBotRunner.java\n    ├── StatisticsService.java\n    ├── TestService.java\n    ├── TrainingDataService.java\n    ├── TweetService.java\n    └── twitter/\n        ├── OfficialTwitterService.java\n        ├── TwitterApi45Service.java\n        ├── TwitterServiceManager.java\n        ├── TwitterServiceProvider.java\n        └── TwttrApi241Service.java\n```\n\n### ML Service (`aracanix-ml-service`)\n\n```\naracanix-ml-service/\n├── app.py\n├── train_model.py\n├── train_over_under_model.py\n├── football_predictor_v5_h2h.joblib\n├── over_under_v2_h2h.joblib\n├── result_encoder_v5.joblib\n└── requirements.txt\n```\n\n---\n\n## Komme i Gang\n\n### Forutsetninger\n\n-   Node.js (v18+)\n-   Java JDK 21+ \u0026 Maven 3.8+\n-   Python 3.9+ \u0026 `pip`\n-   Aktive API-nøkler for api-sports.io, Pinnacle, og Twitter.\n-   En Clerk-konto og tilhørende nøkler.\n-   En Supabase-konto for PostgreSQL-databasen.\n\n### Installasjon og Kjøring\n\n1.  **Backend (`AiPortal-Backend`):**\n    *   Oppdater `src/main/resources/application.properties` med dine database-credentials og API-nøkler.\n    *   Kjør `mvn spring-boot:run` fra rotmappen.\n\n2.  **ML Service (`AiPortal-ML-Service`):**\n    *   Opprett et virtuelt miljø: `python -m venv .venv` og aktiver det.\n    *   Installer avhengigheter: `pip install -r requirements.txt`.\n    *   Kjør `python app.py` for å starte API-serveren.\n    *   *Merk: Du må kjøre `train_model.py` og `train_over_under_model.py` for å generere modellfilene første gang.*\n\n3.  **Frontend (`AiPortal-Frontend`):**\n    *   Opprett en `.env.local`-fil i rotmappen med `VITE_CLERK_PUBLISHABLE_KEY=din_key_her`.\n    *   Kjør `npm install` og deretter `npm run dev`.\n\nApplikasjonen vil være tilgjengelig på `http://localhost:5173`.\n\n---\n\n## Lisens\n\nDistribuert under MIT-lisensen.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartingit2%2Faiportal-ml-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartingit2%2Faiportal-ml-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartingit2%2Faiportal-ml-service/lists"}