Fees are set in the Channel policy.
Commit fee / balance changing
The balance fluctuates because commit fees for channels get renegotiated as the cost to publish to the bitcoin blockchain changes. When the commit fees rise (btc fees become more expensive) some of your local balance is reserved to meet those fees, resulting in your local balance dropping. When fees drop the reverse happens.
To avoid this issue what you want to do is sum all your channel local balances with the commit fees for only the channels you have opened. There is currently no easy way to tell if you opened a channel or not but there was just a PR in lnd for example to make this easier on developers. Right now the solution I am using is to infer whether or not I opened a channel by its sent, received, and local balance.