Dan Persa's numbers were solid once again today, as he completed 23-of-32 passes from 245 yards and two touchdowns.
However, he didn't make big plays in the clutch, and that ended up costing the Wildcats in the end.
Persa was sacked six times against the outstanding Michigan State defensive front, and while a lot of that was the fault of the offensive line, he didn't do a great job evading pressure, sometimes stepping up into pressure.
That hurt NU on its final drive and it hurt on a few key downs throughout the game.
Running Backs: C
After a number of solid games in a row, the Northwestern running game stalled against MSU's defensive front.
Jacob Schmidt led the Cats with 39 yards, but only gained 2.8 yards-per-carry with a long of six yards. Treyvon Greene looked good early, but he fumbled inside the Spartans' five-yard line and was pulled for the rest of the game, finishing with 32 yards.
One of Northwestern's goals coming into the season was to improve its running game, and while the unit had its moments, today was summed up its season—mediocre.
Wide Receivers: B
The Northwestern receivers started to step up over the last month of the season, but they took a step back today.
Drake Dunsmore led the team with 69 yards, but that came on one catch in which he was chased down by an MSU safety. He had a big drop later in the game.
Jeremy Ebert was contained for the most part, catching seven passes for just 39 yards.
A lot of the wide receivers' struggles were due to good defense, but seniors like Dunsmore need to step up and make big plays when given the opportunity.
Offensive Line: D
This was by far the worst showing of the year for the offensive line, which had shown steady improvement on Northwestern's four-game winning streak.
Persa was sacked six times and the running backs had no holes to run through. The two biggest sacks came on NU's last drive, as Persa taken down on third and fourth down.
Defensive Line: C
After showing steady improvement against the run over the past month, the defensive line was manhandled by Michigan State's offensive front.
Le'Veon Bell rushed for 86 yards, averaging 5.4 yards-per-carry, while Edwin Baker added 47 more yards.
Bell's physicality got the best of the NU defensive front, as he fell forward for extra yardage numerous times, helping the Spartans get to third and short on a number of series.
Like the defensive line, Northwestern's linebackers were bowled over the by Michigan State running game, renewing their tackling problems from earlier in the season.
They allowed the MSU running backs to get through the second level a number of times and couldn't get to them on the outside edge.
The linebackers also left open holes in the middle of the field that gave Michigan State quarterback Kirk Cousins room to run and pick up two big first downs on third-and-longs.
Jordan Mabin is a difference-maker, and Northwestern learned that the hard way today when he went down with a shoulder injury.
His replacement, Daniel Jones, was exploited by Cousins, who threw for 214 yards and two touchdowns, including a 46-yard pass over Jones' head that set up a score.
Star receiver B.J. Cunningham had 120 receiving yards and two touchdowns, as well.
Jeravin Matthews did have an interception and Ibraheim Campbell had a nice pass break-up in the endzone, but the Cats were beaten too many times over the top, something that hasn't happened over the past month.
Special Teams: C-
Keshawn Martin returned a rugby punt 57 yards for a touchdown at the end of the second half, which put the Cats down by 14.
In addition, kick coverage was bad today and Venric Mark couldn't get much going for NU's own return team.