Google Adsense does not report fake clicks or remove fake clicks from the account or whereas analytics keeps a record of all clicks. This is the main reason for click number discrepancy.
How to resolve this discrepancy issue
You can not completely get rid of this issue but counter it at some level. Create a Google Analytics custom report to identify the countries where you are getting most of the fake clicks from. If you are using WordPress, install the IP block plugin. Here is the plugin developer’s website: www.webence.nl. I personally request you to donate for the developer’s effort.
This plugin will block all the countries you are getting most of the fake clicks from but you need to add those countries in the blocklist. When you analyse the Google Adsense report You will see that those countries will not be generating even enough revenue.
How to create a custom report to identify fake clicks driven countries
You can use this custom report link https://analytics.google.com/analytics/web/template?uid=11NxK5aJQByBFx_ii0e7Fw. If the city value is (not set), it means you are getting fake clicks from the associated country.