First things first. The page impressions column in Adsense stats shows how many times a webpage containing Adsense ads was viewed by a visitor. Even if your webpages have multiple ad units, they'll will still account for a single page impression per page view in Adsense reports.
There are several reasons why the hit count (or page views) reported by Adsense is lower than the numbers displayed by your stats package:
2. Adsense doesn't have enough ad inventory for your page. In such a situation, Google will show alternate ads or fill the area with custom colors but won't increment the page impression count.
4. It is possible that the default timezone of your stats software is different from Adsense which works according to the US Pacific Time. If that's the case, there will always be a mismatch between the two figures.
5. If a website is slow or a particular webpage is heavy on graphics and widgets, users sometimes abort loading the webpage by pressing the escape key. This may lead to lower Adsense page impressions because the Adsense ads that are located later in the HTML code may not load.
There's little you can do here to match the numbers since it mostly depends on the settings of visitors' web browser and Adwords inventory. However, you may change your stats software default timezome to match that of Adsense (Pacific Time).