If it's not that KitKat feature Dan mentioned, and the intervals are reasonably short (so e.g. it happens at least once while you're sleeping at night):
- enable USB debugging
- connect your device to your PC via USB
- on your PC, run
adb logcat | tee wifi.log
- go to bed
- next morning, press Ctrl+C
- check
wifi.log
to see when it was triggered (and hopefully, by whom)
This should at least help narrowing things down. Even if it doesn't explicitly state "App X triggering WiFi", you can check for patterns, like "evertime WiFi had been turned on, I find event Z of app X mentioned a few lines before". Good indicator it might have to do with X then. So check whether X has some network (or "coarse location") permissions requested (and granted), as if not, it's unlikely to be your candidate. Otherwise, try disabling/freezing/uninstalling it, and see if your issue is gone. If so, you found it – if not, repeat with the next.