Sto provando a valutare un modello in base alle sue prestazioni su scommesse sportive storiche.La funzione di punteggio personalizzato di Scikit-learn richiede valori dal set di dati diverso da X e y
Ho un set di dati che è costituita dalle seguenti colonne:
feature1 | ... | featureX | oddsPlayerA | oddsPlayerB | winner
Il modello sarà facendo una regressione in cui l'uscita è la probabilità che Playera vince la partita
È la mia comprensione che ho può usare una funzione di punteggio personalizzata per restituire i "soldi" che il modello avrebbe fatto se scommettesse ogni volta che una condizione è vera e usa quel valore per misurare l'idoneità del modello. Una condizione simile:
if prediction_player_A_win_odds < oddsPlayerA
money += bet_playerA(oddsPlayerA, winner)
if inverse_odd(prediction_player_A_win_odds) < oddsPlayerB
money += bet_playerB(oddsPlayerB, winner)
Nella funzione di punteggio personalizzato ho bisogno di ricevere i soliti argomenti come "ground_truth, previsioni" (dove ground_truth è il vincitore [] e le previsioni è prediction_player_A_win_odds []) ma anche i campi "oddsPlayerA" e "oddsPlayerB" dal dataset (ed ecco il problema!).
Se la funzione di calcolo del punteggio personalizzato è stata richiamata con i dati nello stesso ordine del set di dati originale, sarebbe banale recuperare questi dati aggiuntivi necessari dal set di dati. Ma in realtà quando si utilizzano metodi di convalida incrociati, i dati ottenuti vengono tutti mescolati (se confrontati all'originale).
Ho provato l'approccio più ovvio che doveva passare la variabile y con [oddsA, oddsB, winner] (dimensioni [n, 3]) ma lo scikit non lo permetteva.
Così, come posso ottenere i dati dal set di dati nella funzione di punteggio personalizzato che non è né X né y ma è ancora "legati insieme" nello stesso ordine?
Come stai facendo la convalida incrociata? Scikit fornisce [vari iteratori] (http://scikit-learn.org/stable/modules/cross_validation.html#cross-validation-iterators) che restituiscono indici nel set di dati originale che è possibile utilizzare per dividere i set treno/test. Se hai indici, puoi usarli per estrarre i dati allineati di cui hai bisogno. – BrenBarn
Per quanto ne so solo con cross_validation.cross_val_score è possibile passare una funzione di calcolo del punteggio personalizzata. Quindi lo stavo usando. Posso cercare un metodo di convalida incrociata che restituisca indici, ma come faccio a utilizzare una funzione di punteggio personalizzata senza utilizzare cross_val_score? – joaoroque
Dopo aver riflettuto un po ', immagino di poterlo fare manualmente con il punteggio predetto e la convalida incrociata con gli indici (oppure no? Come mi preparerei?). Ma preferirei poter utilizzare strumenti come grid_search.GridSearchCV (che consente anche una funzione di punteggio personalizzata). Se potessi evitare l'approccio "manuale" lo apprezzerei. – joaoroque