Various explanations have been put forward to explain the shock result.
1. Rise of the WP, through the brand naming
2. Political inexperience of Koh Pooh Koon
3. Tactical voting, nullifying the multi-corner fight effect
4. Difference in likeability of the two main contenders WP and PAP
5. PAP not being able to solve the problems of Singaporeans
6. Consequence of WP displaying that it is
7. By election effect.
All these explanations are plausible, but they are not enough. Crucially, a lot of LLL's votes came from people who voted for the PAP the last time around. I'm talking about more than 10%. What happened in those two years that got the 10% to switch sides? One of the most important explanations comes from Ravi Philemon's facebook note, shown below:
https://www.facebook.com/raviphilemon/posts/10151620333243277
Contrast the way that the YSL and the Michael Palmer sagas have been handled by the respective parties. For YSL, there was a lot of drama, but people were waiting patiently for WP to solve the problem, other than idiots like Goh Meng Seng who were prematurely blasting the "secretiveness" of WP. Eventually they solved the problem in a satisfactory but not exemplary manner. They sacked YSL not for the affair but not being accountable, and left a lot of questions hanging in the air.
For Michael Palmer, it seemed like the PAP was even more strict with him. Around the same time that the affair came to light, they sacked Palmer. But they went further, and they hung the People's Association out to dry, all but slut shaming Laurel Ong.
So who were the 10%? I think that the Ravi Philemon article says it all. They were the grassroots people on the PAP side, who decided to punish the PAP for their betrayal. As much as people like you on the opposition like to think of the PA and the PAP as one monolithic entity, sometimes they have their spats. We don't know the reasons why Yam Ah Mee quit, but the picture becomes more coherent now: he quit because he was sick and tired that the people's association was hung out to dry. The PAP elite has become so arrogant and detached from reality that they piss off even their own supporters, who immediately knew they had to vote WP to punish the PAP.
The other thing was the choice of candidate. Some people at the PA were unhappy that the PAP did not get a grassroots person from Punggol East to run. In a way this decision was understandable, because to get a Punggol East PA person is basically inviting a lot of criticism from the opposition. But it was another thing that pissed off the PA.
So for me this is the most convincing explanation for the shock result - the PAP fucked the PA, and the PA fucked the PAP back.