The 920 has a huge battery, but largely mediocre life. Is the problem just the higher share of beta/near-beta software and relatively unoptimized OS throughout the platform?
Basically, you are asking who is at fault. It's a combination of things:
Microsoft has claimed that developers aren't really considering battery life when developing their apps. Microsoft recognized this problem early on and released a battery profiler to help diagnose problems related to battery drain. While Microsoft probably has a point, I also think they are making it too easy to ignore battery life considerations. Microsoft needs to make it easier to develop apps that are light on the battery and harder to develop apps that are heavy.
IMHO both developer's apps and WP's API are to blame for this problem, but I'm sure Microsoft would disagree with me.
WP also has an issue with misbehaving DirectX apps. This is different to what I just mentioned, as this isn't about the battery drain caused by a running app, but the battery drain caused by an app that isn't running and should, in theory, be suspended in the background. These apps
shouldn't be using any battery power whatsoever, but do so regardless. At least according to Microsoft's own documentation, this is a bug. I don't know what the problem is, but IMHO the OS must be able to guarantee that apps are correctly transitioned in and out of the various application states (launching, running, suspended), no matter how screwed up an app may be. If the OS can't guarantee this, then it simply isn't robust enough.
IMHO this is a serious OS problem Microsoft needs to fix yesterday.
WP also has an issue with developers who willingly misuse APIs (as WhatsApp did by using the background audio task). This can be devastating to battery life, but these developers feel their approach is justified regardless. Many would probably blame the WhatsApp dev team, but I don't see it that way. IMHO Microsoft could have easily designed their background audio API in a way that made it much harder or even impossible to misuse, but instead, they designed something that is so easy to misuse that it's almost a miracle it isn't misused more often. The design is just begging for trouble.
IMHO Microsoft has only themselves to blame for these occurrences, and should change WP accordingly.
Finally we also have a somewhat screwed up background location API. It's just not thought out well enough. So many people disable it, that Microsoft might as well not have added the feature in the first place. The way this is intended to work requires re-evaluation.
This too is on WP's and thus Microsoft's shoulders.
Summary:
In general, WP is very a well optimized OS, which suffers greatly from two or three bugs and/or design flaws. These problematic areas negate all the benefits gained from an otherwise well designed OS. If WP got all of these things right, it would be far ahead of Android in terms of battery life. Most of the issues are on Microsoft's shoulders to fix.
IMHO Microsoft could fix most developer related problems by adding a battery score to every WP app (showing how light or heavy apps are on the battery) and publishing it in the app store.