Skip to content

Commit

Permalink
Fixed #124 (#125)
Browse files Browse the repository at this point in the history
* Fixed #124

Signed-off-by: Vivek Joshy <8206808+vivekjoshy@users.noreply.github.com>

* Update dependencies

Signed-off-by: Vivek Joshy <8206808+vivekjoshy@users.noreply.github.com>

* Format with black

Signed-off-by: Vivek Joshy <8206808+vivekjoshy@users.noreply.github.com>

* Add changelog fragment

Signed-off-by: Vivek Joshy <8206808+vivekjoshy@users.noreply.github.com>

---------

Signed-off-by: Vivek Joshy <8206808+vivekjoshy@users.noreply.github.com>
  • Loading branch information
vivekjoshy committed Feb 3, 2024
1 parent f76df19 commit fffdad2
Show file tree
Hide file tree
Showing 29 changed files with 664 additions and 700 deletions.
93 changes: 33 additions & 60 deletions benchmark/draw.ipynb
Expand Up @@ -341,9 +341,9 @@
"data_directory = Path(working_directory / Path(\"data\"))\n",
"data_directory.mkdir(exist_ok=True)\n",
"downloader(\n",
" url=\"doi:10.5281/zenodo.10344773/chess.csv\", \n",
" url=\"doi:10.5281/zenodo.10344773/chess.csv\",\n",
" output_file=data_directory / \"chess.csv\",\n",
" pooch=None\n",
" pooch=None,\n",
")"
]
},
Expand Down Expand Up @@ -374,6 +374,7 @@
" BLACK_WINS = 2\n",
" STALEMATE = 3\n",
"\n",
"\n",
"@dataclass(slots=True)\n",
"class Player:\n",
" name: str\n",
Expand Down Expand Up @@ -452,8 +453,8 @@
" options=[m.__name__ for m in models],\n",
" value=PlackettLuce.__name__,\n",
" # rows=10,\n",
" description='Model:',\n",
" disabled=False\n",
" description=\"Model:\",\n",
" disabled=False,\n",
")\n",
"display(widget)"
]
Expand Down Expand Up @@ -693,31 +694,19 @@
"\n",
"for match_index, row in train.iterrows():\n",
" white_player = Player(name=row[\"white_username\"])\n",
" black_player = Player(name=row[\"black_username\"]) \n",
" players = {\n",
" row[\"white_username\"]: white_player,\n",
" row[\"black_username\"]: black_player\n",
" }\n",
" \n",
" black_player = Player(name=row[\"black_username\"])\n",
" players = {row[\"white_username\"]: white_player, row[\"black_username\"]: black_player}\n",
"\n",
" white_result = row[\"white_result\"]\n",
" black_result = row[\"black_result\"]\n",
" \n",
"\n",
" if white_result == \"win\":\n",
" match = Match(\n",
" result=Result.WHITE_WINS,\n",
" players=players\n",
" )\n",
" match = Match(result=Result.WHITE_WINS, players=players)\n",
" elif black_result == \"win\":\n",
" match = Match(\n",
" result=Result.BLACK_WINS,\n",
" players=players\n",
" )\n",
" match = Match(result=Result.BLACK_WINS, players=players)\n",
" else:\n",
" match = Match(\n",
" result=Result.STALEMATE,\n",
" players=players\n",
" )\n",
" \n",
" match = Match(result=Result.STALEMATE, players=players)\n",
"\n",
" train_matches.append(match)\n",
" t.update(1)\n",
"\n",
Expand Down Expand Up @@ -830,20 +819,20 @@
" player_2_rating = openskill_players[player_2]\n",
" team_1 = [player_1_rating]\n",
" team_2 = [player_2_rating]\n",
" \n",
"\n",
" if match.result == Result.WHITE_WINS:\n",
" ranks = [1, 2]\n",
" elif match.result == Result.BLACK_WINS:\n",
" ranks = [2, 1]\n",
" else:\n",
" ranks = [1, 1]\n",
" \n",
"\n",
" rated_teams = model.rate(teams=[team_1, team_2], ranks=ranks)\n",
"\n",
" for team in rated_teams:\n",
" for player in team:\n",
" openskill_players[player.name] = player\n",
" \n",
"\n",
" t.update(1)\n",
"\n",
"_ = gc.collect()"
Expand Down Expand Up @@ -970,32 +959,20 @@
"# Test Data\n",
"test_matches: List[Match] = []\n",
"\n",
"for match_index, row in test.iterrows():\n",
"for match_index, row in test.iterrows():\n",
" white_player = Player(name=row[\"white_username\"])\n",
" black_player = Player(name=row[\"black_username\"]) \n",
" players = {\n",
" row[\"white_username\"]: white_player,\n",
" row[\"black_username\"]: black_player\n",
" }\n",
" \n",
" black_player = Player(name=row[\"black_username\"])\n",
" players = {row[\"white_username\"]: white_player, row[\"black_username\"]: black_player}\n",
"\n",
" white_result = row[\"white_result\"]\n",
" black_result = row[\"black_result\"]\n",
" \n",
"\n",
" if white_result == \"win\":\n",
" match = Match(\n",
" result=Result.WHITE_WINS,\n",
" players=players\n",
" )\n",
" match = Match(result=Result.WHITE_WINS, players=players)\n",
" elif black_result == \"win\":\n",
" match = Match(\n",
" result=Result.BLACK_WINS,\n",
" players=players\n",
" )\n",
" match = Match(result=Result.BLACK_WINS, players=players)\n",
" else:\n",
" match = Match(\n",
" result=Result.STALEMATE,\n",
" players=players\n",
" )\n",
" match = Match(result=Result.STALEMATE, players=players)\n",
"\n",
" test_matches.append(match)\n",
" t.update(1)"
Expand Down Expand Up @@ -1063,7 +1040,6 @@
}
],
"source": [
"\n",
"# Predict OpenSkill Matches\n",
"print(\"Predict Matches in Test Set using OpenSkill:\")\n",
"t = tqdm(total=len(test_matches))\n",
Expand All @@ -1078,24 +1054,24 @@
" draw = True\n",
" else:\n",
" draw = False\n",
" \n",
"\n",
" player_1, player_2 = match.players.keys()\n",
" \n",
"\n",
" if player_1 in openskill_players:\n",
" player_1_rating = openskill_players[player_1]\n",
" else:\n",
" player_1_rating = model.rating(name=player_1)\n",
" \n",
"\n",
" if player_2 in openskill_players:\n",
" player_2_rating = openskill_players[player_2]\n",
" else:\n",
" player_2_rating = model.rating(name=player_2)\n",
" \n",
"\n",
" teams = [[player_1_rating], [player_2_rating]]\n",
" \n",
"\n",
" white_win_probability, black_win_probability = model.predict_win(teams)\n",
" draw_probability = model.predict_draw(teams)\n",
" \n",
"\n",
" if draw_probability > (white_win_probability + black_win_probability):\n",
" if draw:\n",
" openskill_correct_predictions += 1\n",
Expand All @@ -1106,7 +1082,7 @@
" openskill_correct_predictions += 1\n",
" else:\n",
" openskill_incorrect_predictions += 1\n",
" \n",
"\n",
" t.update(1)"
]
},
Expand Down Expand Up @@ -1184,11 +1160,8 @@
"\n",
"openskill_accuracy = round(\n",
" (\n",
" openskill_correct_predictions\n",
" / (\n",
" openskill_incorrect_predictions\n",
" + openskill_correct_predictions\n",
" )\n",
" openskill_correct_predictions\n",
" / (openskill_incorrect_predictions + openskill_correct_predictions)\n",
" )\n",
" * 100,\n",
" 2,\n",
Expand Down
64 changes: 28 additions & 36 deletions benchmark/rank.ipynb
Expand Up @@ -334,14 +334,14 @@
"data_directory = Path(working_directory / Path(\"data\"))\n",
"data_directory.mkdir(exist_ok=True)\n",
"downloader(\n",
" url=\"doi:10.5281/zenodo.10342317/train.parquet\", \n",
" url=\"doi:10.5281/zenodo.10342317/train.parquet\",\n",
" output_file=data_directory / \"train.parquet\",\n",
" pooch=None\n",
" pooch=None,\n",
")\n",
"downloader(\n",
" url=\"doi:10.5281/zenodo.10342317/test.parquet\", \n",
" output_file=data_directory / \"test.parquet\", \n",
" pooch=None\n",
" url=\"doi:10.5281/zenodo.10342317/test.parquet\",\n",
" output_file=data_directory / \"test.parquet\",\n",
" pooch=None,\n",
")"
]
},
Expand Down Expand Up @@ -473,8 +473,8 @@
" options=[m.__name__ for m in models],\n",
" value=PlackettLuce.__name__,\n",
" # rows=10,\n",
" description='Model:',\n",
" disabled=False\n",
" description=\"Model:\",\n",
" disabled=False,\n",
")\n",
"display(widget)"
]
Expand Down Expand Up @@ -634,14 +634,14 @@
],
"source": [
"def reduce_memory_usage_pl(df, name):\n",
" \"\"\" \n",
" \"\"\"\n",
" Reduce memory usage by polars dataframe {df} with name {name} by changing its data types.\n",
" Original pandas version of this function: \n",
" Original pandas version of this function:\n",
" https://www.kaggle.com/code/arjanso/reducing-dataframe-memory-size-by-65\n",
" \"\"\"\n",
" print(f\"Memory usage of dataframe {name} is {round(df.estimated_size('mb'), 2)} MB\")\n",
" Numeric_Int_types = [pl.Int8,pl.Int16,pl.Int32,pl.Int64]\n",
" Numeric_Float_types = [pl.Float32,pl.Float64] \n",
" Numeric_Int_types = [pl.Int8, pl.Int16, pl.Int32, pl.Int64]\n",
" Numeric_Float_types = [pl.Float32, pl.Float64]\n",
" for col in df.columns:\n",
" col_type = df[col].dtype\n",
" c_min = df[col].min()\n",
Expand All @@ -664,7 +664,9 @@
" df = df.with_columns(df[col].cast(pl.Categorical))\n",
" else:\n",
" pass\n",
" print(f\"Memory usage of dataframe {name} became {round(df.estimated_size('mb'), 2)} MB\")\n",
" print(\n",
" f\"Memory usage of dataframe {name} became {round(df.estimated_size('mb'), 2)} MB\"\n",
" )\n",
" return df\n",
"\n",
"\n",
Expand Down Expand Up @@ -814,31 +816,28 @@
" player = Player(\n",
" name=raw_player[\"player_name\"],\n",
" kill_ratio=raw_player[\"kill_ratio\"],\n",
" assist_ratio=raw_player[\"assist_ratio\"]\n",
" assist_ratio=raw_player[\"assist_ratio\"],\n",
" )\n",
"\n",
" match_id = raw_player['match_id']\n",
" team_id = raw_player['team_id']\n",
" match_id = raw_player[\"match_id\"]\n",
" team_id = raw_player[\"team_id\"]\n",
" if match_id not in train_matches:\n",
" team = Team(\n",
" id=raw_player[\"team_id\"],\n",
" match_id=raw_player[\"match_id\"],\n",
" rank=raw_player[\"team_placement\"],\n",
" players={player.name: player}\n",
" players={player.name: player},\n",
" )\n",
"\n",
" match = Match(\n",
" id=raw_player[\"match_id\"],\n",
" teams={team.id: team}\n",
" )\n",
" match = Match(id=raw_player[\"match_id\"], teams={team.id: team})\n",
" else:\n",
" if team_id not in train_matches[match_id].teams:\n",
" match = train_matches[match_id]\n",
" team = Team(\n",
" id=raw_player[\"team_id\"],\n",
" match_id=raw_player[\"match_id\"],\n",
" rank=raw_player[\"team_placement\"],\n",
" players={player.name: player}\n",
" players={player.name: player},\n",
" )\n",
" match.teams[team_id] = team\n",
" else:\n",
Expand Down Expand Up @@ -1131,31 +1130,28 @@
" player = Player(\n",
" name=raw_player[\"player_name\"],\n",
" kill_ratio=raw_player[\"kill_ratio\"],\n",
" assist_ratio=raw_player[\"assist_ratio\"]\n",
" assist_ratio=raw_player[\"assist_ratio\"],\n",
" )\n",
"\n",
" match_id = raw_player['match_id']\n",
" team_id = raw_player['team_id']\n",
" match_id = raw_player[\"match_id\"]\n",
" team_id = raw_player[\"team_id\"]\n",
" if match_id not in test_matches:\n",
" team = Team(\n",
" id=raw_player[\"team_id\"],\n",
" match_id=raw_player[\"match_id\"],\n",
" rank=raw_player[\"team_placement\"],\n",
" players={player.name: player}\n",
" players={player.name: player},\n",
" )\n",
"\n",
" match = Match(\n",
" id=raw_player[\"match_id\"],\n",
" teams={team.id: team}\n",
" )\n",
" match = Match(id=raw_player[\"match_id\"], teams={team.id: team})\n",
" else:\n",
" if team_id not in test_matches[match_id].teams:\n",
" match = test_matches[match_id]\n",
" team = Team(\n",
" id=raw_player[\"team_id\"],\n",
" match_id=raw_player[\"match_id\"],\n",
" rank=raw_player[\"team_placement\"],\n",
" players={player.name: player}\n",
" players={player.name: player},\n",
" )\n",
" match.teams[team_id] = team\n",
" else:\n",
Expand Down Expand Up @@ -1228,7 +1224,6 @@
}
],
"source": [
"\n",
"# Predict OpenSkill Matches\n",
"print(\"Predict Matches in Test Set using OpenSkill:\")\n",
"t = tqdm(total=len(test_matches))\n",
Expand Down Expand Up @@ -1358,11 +1353,8 @@
"\n",
"openskill_accuracy = round(\n",
" (\n",
" openskill_correct_predictions\n",
" / (\n",
" openskill_incorrect_predictions\n",
" + openskill_correct_predictions\n",
" )\n",
" openskill_correct_predictions\n",
" / (openskill_incorrect_predictions + openskill_correct_predictions)\n",
" )\n",
" * 100,\n",
" 2,\n",
Expand Down

0 comments on commit fffdad2

Please sign in to comment.