It's a really interesting question, one that I am very familiar with. Within my current role, all of the events I run have to be free as my construction project is taxpayer funded and it would be inappropriate to charge. We have quite a strong brand and certain events (like behind the scenes public access such as Open House) have a drop out rate of between 15 - 25%. Events we run aimed at the younger generation (such as Open Doors) have a slightly higher drop out rate of between 25 and 35% drop out. This figure however drops dramatically if you build the event around a school group or set of school groups from the very start, but then limits the event to only those invited.
How to improve the no show rate... from my experience it's quite hard to change the rates in any dramatic way. I have tried incentivizing to get people to attend, but fundamentally there may be a sense of 'if I don't need to go it's fine because I haven't paid anything', as opposed to where money has been paid for a ticket and this seems to be the crux of my problem.
As Dewi mentioned, coffee is a good way to get people to attend a free event. When I do cycle safety events, these are usually roadside in central London in the morning rush from 7:30-10am, and as an enticement to get cyclists to stop we offer free bacon and/or egg rolls, tea and coffee, and a chance to get their bike checked. So apart from food and drink, if you were to offer a service or giveaway it has to be relevant and something which will help or interest people.
Love to hear of other ideas out there.