The last game was where he took it a step too far. Several times during the game he had the opportunity to pressure Gukesh to find the correct sequence of moves, only to take the easy way out and trade a piece to make the game more drawish.
His blunder at the end was him thinking he'd just trade off the Rooks and kill off the game, but missed the fact that he basically sac'd his Bishop in the process.
According to the engine, he was in a slightly advantageous position, but from the post-game interviews it's clear he didn't realize his advantage.
Often it's also an advantage which only an engine can exploit (by a series of difficult to find engine moves).
It's basically what allowed Gukesh to do exactly that throughout the match. His opening prep was impressive and because he allowed himself time to think outside of the opening he at least tried to push on most games.
Something doesn't gotta give, when there's only a few moves left in a simplified position.
Basically in every single stat, Ding plays more like the chess engines; and overall he was able to capitalize better on an advantage and recover better from a disadvantage than Gukesh. Just looking at the data, I think it would be reasonable to conclude that Gukesh won mostly by luck: that the more probable outcome was that Ding didn't blunder in the final game.
On the other hand, Ding isn't a chess engine; he takes longer and gets tired sooner than a chess engine. One aspect of human chess is management of both time and intellectual energy, so there's certainly an argument to be made that the extra effort Ding put in to play more like a chess engine wasn't the optimal strategy for a human.