yanivohayon1/transfertalk-players
TransferTalk Players Dataset A fully synthetic, fictional multimodal dataset of 1,000 football (soccer) player profiles, created for a university Data Science capstone project. Each profile pairs a rich text description with a matching illustrated player card image. No real players, teams, or leagues are represented. All names, teams, leagues, and nationalities belong to a fictional universe ("The Meridian League"), generated to avoid any real-world IP, privacy, or… See the full description on the dataset page: https://huggingface.co/datasets/yanivohayon1/transfertalk-players.
TransferTalk Players Dataset
A fully synthetic, fictional multimodal dataset of 1,000 football (soccer) player profiles, created for a university Data Science capstone project. Each profile pairs a rich text description with a matching illustrated player card image.
No real players, teams, or leagues are represented. All names, teams, leagues, and nationalities belong to a fictional universe ("The Meridian League"), generated to avoid any real-world IP, privacy, or hallucination-about-real-people concerns.
Dataset Summary
- 1,000 rows, 30 columns
- Modality: text + image (multimodal)
- Generation method: local open-weight LLM (
Qwen/Qwen2.5-1.5B-Instruct) for text,stabilityai/sdxl-turbofor images, both run viatransformers/diffuserson a Colab GPU. No scraping, no human-written content, no formula/random substitution for the generated content itself.
Schema
Generation Methodology (summary)
Profiles are generated in batches of 10 via structured JSON prompting, using a randomly sampled few-shot example per batch to guide format and writing style. A brace-depth JSON salvage routine recovers valid objects from partially malformed model output instead of discarding the whole batch. Player card images are generated per-profile from a prompt built out of the player's own position/style/team-color attributes, using a 2-step SDXL-Turbo pipeline.
Additional Fields (Feature Engineering)
Beyond the original AI-generated profile (bio, scouting report, 6 skill stats), the dataset includes deterministically-derived fields, computed from the existing generated data (no additional LLM calls):
height_cm,preferred_foot,squad_number,contract_expires- profile facts, position-aware where relevant (e.g. taller height ranges for GK/CB).market_value_history- 5 seasons (2022-2026) of market value, computed with the same formula asmarket_value_eur, applied to each season's effective age, plus small random jitter for a realistic trend.appearances,goals,assists- current-season stats, sampled from a Poisson distribution over an expected value tied to existing skill stats (shooting→goals,passing→assists,physical→appearances) and a position-specific weight (e.g. strikers score far more than goalkeepers).
These fields exist to bring the player profile closer to a real scouting platform's layout, while keeping the actual generative AI component (the text bio, scouting report, and later the comparison reports) as the project's core GenAI focus - these numeric extensions are feature engineering, not AI-generated content.
Exploratory Data Analysis - Summary
Full EDA notebook is included in this repository (EDA_notebook.ipynb). As required, AI-generation issues were actively identified and either corrected or explicitly flagged:
- Duplicate full names (621/1000, initial): name pool of 20x20=400 combinations was far smaller than 1,000 samples drawn with replacement (birthday-paradox collision). Fixed by expanding the pool to 46x46=2,116 combinations.
- Incomplete records (32/1000): some LLM responses were truncated mid-JSON, producing records missing required fields. Fixed by dropping and regenerating.
- Duplicate full names re-introduced (31/1000): discovered during EDA (
df.describe()showedfull_nameuniqueness of 969, not 1000) because the regeneration in fix #2 sampled from the original small name pool. Fixed the same way as issue #1 - a direct example of iterating generation based on EDA. - Stat value range: despite requesting 0-99, the model never produced values at the true extremes (observed range: 4-98 across all 1,000 profiles). Flagged, not corrected - a mild instruction-following gap.
- Goalkeeper stat modeling: goalkeepers (GK) show the highest average
defendingof any position, since the model reused the same 6-stat schema for every position rather than goalkeeper-specific attributes. Flagged as a schema-design limitation. - Weak text-to-number alignment: profiles whose
scouting_reportuses superlative language ("world class", "exceptional") average only ~6.4% highermarket_value_eurthan those without it - correct direction, weaker signal than expected. - Age-38 distribution check: age 38 shows a noticeably higher count (61) than the mean across other ages (44.7, expected ~45.5 under uniform sampling) - a ~2.3 standard-deviation deviation. Reviewed and judged to be within normal random noise across 22 age categories rather than a systematic bug.
Stat correlations were also checked for internal consistency (e.g. shooting vs defending: -0.74; physical vs defending: +0.59), supporting that the LLM generally preserved sensible relationships between position and skill ratings.
Files in this repository
transfertalk_players_raw.json,transfertalk_players_raw.csv- the datasetplayer_cards/- 1,000 player card images ({player_id}.png)Synthetic_Data_Generation.ipynb- Part 1 generation notebook (includes a feature-engineering extension section for the additional fields above)EDA_notebook.ipynb- Part 2 EDA notebook (this summary's full source)
Intended Use
Built for the TransferTalk capstone project - a Transfermarkt-style multimodal demo app (recommendation system + AI-generated scouting reports). Suitable for teaching/demoing multimodal embeddings, recommendation systems, and LLM-based synthetic data generation pipelines.
License
MIT. All content is synthetic and fictional.
