This study was designed to rank tight end prospects based on a combination of physical measurements, alignment usage, and college production using Python.
Data Collection
Prospect information was collected from www.drafttek.com using the requests library since it uses an HTML source. Season stats and game logs were collected from espn.com using Selenium because the website uses JavaScript. XPaths were used to identify and retrieve data from each of the sources. A CSV of ESPN links to identify each tight end's unique player id was manually collected. Publicly available snap data from pff.com was manually added to the season stats to identify how each tight end prospect was utilized. Games played were manually collected and added to each player's season stats. The following variables were collected:
Receptions
Receiving Yards
Average yards per reception
Longest Reception
Touchdowns
Carries
Rush Yards
Average yards per carry
Rushing Touchdowns
Longest carry
Player Name
Season
Height
Weight
Team
Inline Snaps
Slot Snaps
Games Played
Data Methodology
Since we acquired season stats, we will be able to calculate career stats by aggregating player data across all seasons using pandas. The regex library was used to standardize player names in all CSV files by removing any punctuation from a player's name along with any remaining spaces that followed. All letters were lower case to avoid any mismatches due case sensitivity during merging.
Next, we aggregate season stats by player for receptions, yards, touchdowns, and games played using the groupby.agg() command from Pandas to sum all data across a player's entire career.
The player's height is converted into inches by removing the apostrophe after the foot digit and assigning the split values to variables. The variables are converted to integers, and the variable containing the foot digit is multiplied by 12 and summed with the original inches value stored in the second variable.
The data frame containing the player's height and weight was then merged with the data frame containing the career stats by matching each player to a row of data in the career stats data frame.
The game logs were filtered to find how many games a tight end had 40 plus yards as well as how many games they averaged 15 plus yards per reception using pandas to filter through each player's game logs and find the size of the filtered data frame for both thresholds of interest.
Per game stats were calculated across all receiving and rushing stats by dividing the variable of interest by games played. Touchdowns per receptions was calculated by dividing career touchdowns by receptions. The player's career average yards per catch was also calculated by dividing career yards by receptions.
Finally, we calculated the total snaps by combining the inline and slot snap counts for each respective player. We then calculate a percentage for slot rate by dividing the player's snaps in the slot by their total snaps, and the inline rate is calculated by dividing the player's total snaps inline by their total snaps. The resulting data set was saved as an output for analytics.
Data Modeling
To begin, I created a correlation matrix using the corr command and stored the results in a variable. This was then graphed as a heatmap using seaborn with matplotlib for graph configurations. TD_per_game and 40+YDGAMES had a strong relationship as indicated by the correlation coefficient along with YD_per_game, REC_per_game, and 40+YDGAMES.
When I started this a few weeks ago, I was not using data on slot and inline snaps. I had one model in mind to create a raw score for prospects based on weighted features, but the model was biased towards slot tight ends. After this, I added snap data and realized that it would be better to give tight ends two separate scores for inline and slot performance. The prospect's final score is an average of the two.
The variables used for inline grading are "TD_per_game", "15+AVGGAMES", "Inline_rate", "Weight", and "YDS_per_game". The variables used to calculate the slot grade were "40+YDGAMES", "Height_Inches", "Slot_rate", and "TD_per_rec". Higher weights of 1.2 were given to inline and slot rates to properly score tight ends for their respective scoring models. The other weights are given equal weights of 1.0 divided by # of remaining features because we have no reason to value one over the other without proven research or logical reasoning. Each raw score was divided by the maximum score in each respective grouping and multiplied by 100 to scale the scoring system between 0 and 100.
Visualizations of tight end roles against production were created using plotly to aid my understanding of each tight end prospects' production in yards, touchdowns, and yards per reception with an understanding of their usage throughout college. The tight ends were organized by archetypes based on whether they scored higher inline, from the slot, or had a balance grade in both.
Results
1. Michael Trigg
Prospect Score: 100
Archetype: Slot
Michael Trigg was 4th amongst tight ends in touchdowns per reception and yards per reception, and he finished 2nd in touchdowns per game. He had 14 games of 40 plus yards throughout his college career, which was tied for 8th in the class. Trigg was 5th in games where he averaged 15+ yards per reception. He was 5th in yards per game, averaging 42.26 receiving yards. He lined up in the slot around 71.82% of his last season, and he was productive enough to score the highest in this tight end class. His film backs up the ranking, where he displays reliable hands with several jaw dropping receptions. He has good agility for a tight end, and he has the instincts to play physical after the catch when needed. What he does very well is adjust his routes while his QB is scrambling around the pocket. Michael Trigg's biggest red flag is that he has played college football for five years without a real standout season. His lack of top level speed and strength will limit him from being a true mainstay at the position, and his inability to impact the game outside of pass catching is why I view him as a round 5 pick and borderline starting tight end in the NFL.
2. Matthew Hibner
Prospect Score: 97.7
Archetype: Hybrid
Matthew Hibner ranked 14th in yards per game with 28.24 receiving yards through college. He was 7th in touchdowns per game and 2nd in touchdowns per reception. On tape, He's a deceptive athlete, who has good speed to create seperation and pick up yards after the catch. Hibner has good arm length to secure inaccurate passes, and he has the weight to play through physicality at the line of scrimmage. His 14.37 yards per reception was the best in the class. He shined as an H-back, where he thrived on delayed releases. 2/3 of his snaps were in the slot, but he graded out as a hybrid tight end due to his red zone efficiency and yards per reception. Hibner would thrive on a team that runs two tight end personnel, where he can carve out a niche role with opportunity to build some consistency and grow into an every down tight end. I have him rated as a 3rd to 4th round pick with high upside.
3. Eli Stowers
Prospect Score: 93.6
Archetype: Slot
Eli Stowers was the only tight end with a slot score near Michael Trigg. He had strong statistics across the board, but his inline score was low due to poor rankings for weight and touchdowns per reception. Stowers surpassed 40 yards in 19 games, which was 3rd best in the class. His 45.46 receiving yards per game was 2nd in the class, and his 6th ranked touchdown per game numbers were above average. Stowers' 12.14 yards per reception was 9th amongst tight end prospects. At 235 pounds, there has to be concerns about Stowers' ability to develop into an every down tight end and threat after the catch. He projects more as a volume pass catcher with great speed to outrun linebackers and pick up yards underneath. Stowers is a good pick in the mid to late second round for a team with established offensive weapons, where he could thrive as a reliable third option.
4. Tanner Koziol
Prospect Score: 87.0
Archetype: Slot
Tanner Koziol is the most accomplished tight end in this draft class from a career totals perspective. His 47.53 yards per game and .51 touchdown per game led all tight end prospects. He was also 9th in touchdowns per reception. He was tied with Matthew Hibner for 3rd in slot tight end grading. His inline score suffered tremendously due to his yards per reception being 2nd worst in the class and his 237 pound frame. He played a good amount of snaps in both the slot and inline, but his numbers are driven by volume over efficiency. He profiles to be a backup tight end, and I have a round 5 grade for him.
5. Kenyon Sadiq
Prospect Score: 85.2
Archetype: Slot
If combine measurements were accounted for, Kenyon Sadiq would likely move up these rankings. He ranked fifth in touchdowns per game and 2nd in touchdowns per receptions amongst this group. He had 9 games where he averaged 15+ yards per reception, which was 7th in the class. The two do a great job of showcasing his strengths of being a red zone weapon and threat after the catch. His production isn't up to par with the athletic ability, and at 6'3, he will likely have difficulty developing into a consistent downfield threat. I have Kenyon Sadiq graded as a day 3 pick and developmental project with versatility, effort, and big play upside similar to Jonnu Smith.
6. Dae'Quan Wright
Prospect Score: 84.6
Archetype: Inline
Dae'Quan Wright had the highest score for inline grading, and I would consider him a value in this draft. He has ideal size and weight to play the position at 6'4, 255 pounds. He was 4th in 40+ yard games with 17 of them, and he ranked 1st in games where he averaged 15+ yards per receptions and 2nd in yards per reception at 14.19. Wright averaged 34.11 receiving yards per game, which is 9th amongst all prospects. His touchdown per game and touchdown per reception numbers were 15th and 14th respectively. His slot score was low, but he played enough snaps in the slot to show that he is more than capable of developing into an every down tight end. Wright should be a 3rd to 4th round pick.
7. Justin Joly
Prospect Score: 84.0
Archetype: Inline
Justin Joly is another sleeper in this draft, and he was the only player to break the model. He was second in 40+ yard games with 23, and 4th in games where he averaged 15+ yards per reception. He averaged 43.96 yards per game, which is 3rd amongst all tight end prospects. He was 4th in touchdowns per game and 10th in touchdowns per reception. He led his NC State in receptions this past season and finished 2nd last season. He was also their leader in total receiving yards during the 2024 season ahead of the talented KC Concepcion. The data had him playing a balanced number of snaps both inline and in the slot, which led to him being penalized for not specializing in one or the other. Otherwise, he has a strong physical profile, and he showed he can line up inline or in the slot and play H-back as well. Joly should be considered a day 2 to 3 pick with the upside to be a featured weapon on a pro offense.
