- always try to make the input impedance as low as possible to reduce external noise. But beware: the source of the input must be able to drive the input without getting damaged or overheat or going into some protection. Also beware that with low impedance, the source will require more current to drive the input and that may have side effects, like internal heating of a temperature sensor or inducing extra noise from heating up the sillicon.
- and indeed, use as much oversampling (= average out a range of values) as possible, it will always improve the accuracy.
The ADC of the ESP8266 seems to be especially bad because it's also used internally for the WLAN module, continuously. There is a newer function in the SDK that takes a whole lot of samples in one go, promised to be more accurate, but the prerequisite is that WLAN is turned of before the call. So I guess that says a lot.
I would always suggest to use an external ADC, they're dead cheap.