This commit is contained in:
@@ -296,6 +296,8 @@
|
|||||||
"engine-label-low": "Low",
|
"engine-label-low": "Low",
|
||||||
"engine-label-very-low": "Very Low",
|
"engine-label-very-low": "Very Low",
|
||||||
"best-single-pick": "Value Bet (odds-based)",
|
"best-single-pick": "Value Bet (odds-based)",
|
||||||
|
"most-reliable-read": "Most Reliable Read",
|
||||||
|
"most-reliable-copy": "The market the model reads with the highest accuracy for this match. Even if the winner is unclear, this read can be stronger.",
|
||||||
"match-result-prediction": "Match Result Prediction",
|
"match-result-prediction": "Match Result Prediction",
|
||||||
"match-result-copy": "The model's most likely outcome (who wins).",
|
"match-result-copy": "The model's most likely outcome (who wins).",
|
||||||
"match-result-vs-value": "This is the most likely outcome. The \"Value Bet\" below is the most profitable pick by odds — the two can differ.",
|
"match-result-vs-value": "This is the most likely outcome. The \"Value Bet\" below is the most profitable pick by odds — the two can differ.",
|
||||||
|
|||||||
@@ -296,6 +296,8 @@
|
|||||||
"engine-label-low": "Düşük",
|
"engine-label-low": "Düşük",
|
||||||
"engine-label-very-low": "Çok Düşük",
|
"engine-label-very-low": "Çok Düşük",
|
||||||
"best-single-pick": "Değerli Bahis (orana göre)",
|
"best-single-pick": "Değerli Bahis (orana göre)",
|
||||||
|
"most-reliable-read": "En Güvenilir Okuma",
|
||||||
|
"most-reliable-copy": "Bu maçta modelin en yüksek isabetle okuduğu market. Maç sonucu belirsiz olsa bile bu okuma daha güçlü olabilir.",
|
||||||
"match-result-prediction": "Maç Sonucu Tahmini",
|
"match-result-prediction": "Maç Sonucu Tahmini",
|
||||||
"match-result-copy": "Modelin en olası gördüğü sonuç (kim kazanır).",
|
"match-result-copy": "Modelin en olası gördüğü sonuç (kim kazanır).",
|
||||||
"match-result-vs-value": "Bu en olası sonuçtur. Aşağıdaki \"Değerli Bahis\" ise orana göre en kârlı görülen seçimdir — ikisi farklı olabilir.",
|
"match-result-vs-value": "Bu en olası sonuçtur. Aşağıdaki \"Değerli Bahis\" ise orana göre en kârlı görülen seçimdir — ikisi farklı olabilir.",
|
||||||
|
|||||||
@@ -1214,6 +1214,27 @@ export default function PredictionCard({ prediction }: PredictionCardProps) {
|
|||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
// ── En Güvenilir Okuma (akıllı market seçimi) ──────────────────────
|
||||||
|
// Backtest: always-MS headline = %53 hit; picking the HIGHEST-confidence
|
||||||
|
// market per match = %74 hit (DC / Üst1.5 / Üst3.5 etc.). The model's
|
||||||
|
// probabilities are fine — the upgrade is *choosing which market to lead
|
||||||
|
// with*. We surface the most reliable read (highest calibrated_confidence
|
||||||
|
// across all bet_summary markets), so e.g. a match with an unclear winner
|
||||||
|
// but a clear "Üst 2.5" leads with the goals call instead of a coin-flip MS.
|
||||||
|
const mostReliableRead = (() => {
|
||||||
|
const items = prediction.bet_summary;
|
||||||
|
if (!Array.isArray(items) || items.length === 0) return null;
|
||||||
|
let best: (typeof items)[number] | null = null;
|
||||||
|
for (const it of items) {
|
||||||
|
const conf = it.calibrated_confidence ?? 0;
|
||||||
|
// require a genuinely confident read; skip near-coinflip
|
||||||
|
if (conf < 55) continue;
|
||||||
|
if (!best || conf > (best.calibrated_confidence ?? 0)) best = it;
|
||||||
|
}
|
||||||
|
if (!best) return null;
|
||||||
|
return best;
|
||||||
|
})();
|
||||||
|
|
||||||
const sport = getPredictionSport(prediction);
|
const sport = getPredictionSport(prediction);
|
||||||
const isBasketball = sport === "basketball";
|
const isBasketball = sport === "basketball";
|
||||||
|
|
||||||
@@ -1494,6 +1515,48 @@ export default function PredictionCard({ prediction }: PredictionCardProps) {
|
|||||||
</Box>
|
</Box>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
|
{mostReliableRead ? (
|
||||||
|
<Box
|
||||||
|
p={4}
|
||||||
|
bg={statCardBg}
|
||||||
|
borderWidth="1px"
|
||||||
|
borderColor={borderColor}
|
||||||
|
borderRadius="2xl"
|
||||||
|
>
|
||||||
|
<HStack justify="space-between" align="start" flexWrap="wrap" gap={2}>
|
||||||
|
<VStack align="start" gap={1}>
|
||||||
|
<Badge colorPalette="teal" variant="subtle" borderRadius="full">
|
||||||
|
{uiText("most-reliable-read", "En Güvenilir Okuma")}
|
||||||
|
</Badge>
|
||||||
|
<HStack gap={2}>
|
||||||
|
<Text fontSize="xl" fontWeight="bold">
|
||||||
|
{getMarketLabel(mostReliableRead.market, marketLabels)}:{" "}
|
||||||
|
{mostReliableRead.pick}
|
||||||
|
</Text>
|
||||||
|
</HStack>
|
||||||
|
<Text fontSize="sm" color="fg.muted" maxW="440px">
|
||||||
|
{uiText(
|
||||||
|
"most-reliable-copy",
|
||||||
|
"Bu maçta modelin en yüksek isabetle okuduğu market. Maç sonucu belirsiz olsa bile bu okuma daha güçlü olabilir.",
|
||||||
|
)}
|
||||||
|
</Text>
|
||||||
|
</VStack>
|
||||||
|
<VStack align="end" gap={0}>
|
||||||
|
<Text fontSize="2xl" fontWeight="bold" color="teal.500">
|
||||||
|
{formatPercent(
|
||||||
|
mostReliableRead.unified_score ??
|
||||||
|
mostReliableRead.calibrated_confidence,
|
||||||
|
0,
|
||||||
|
)}
|
||||||
|
</Text>
|
||||||
|
<Text fontSize="xs" color="fg.muted">
|
||||||
|
{uiText("confidence-label", "Güven")}
|
||||||
|
</Text>
|
||||||
|
</VStack>
|
||||||
|
</HStack>
|
||||||
|
</Box>
|
||||||
|
) : null}
|
||||||
|
|
||||||
{recommendedPick ? (
|
{recommendedPick ? (
|
||||||
<Grid templateColumns={{ base: "1fr", xl: "1.4fr 1fr" }} gap={4}>
|
<Grid templateColumns={{ base: "1fr", xl: "1.4fr 1fr" }} gap={4}>
|
||||||
<Box
|
<Box
|
||||||
|
|||||||
Reference in New Issue
Block a user