Skill is normalized (as in between 0 and 1), but for display purposes it's multiplied by 1000 and rounded to nearest integer. In other words 100% perfect skill would be 1000. OTOH, someone scoring no points at all, would have score of 0.
As for how it's calculated, shortly after the question was posted here, it has been extracted from the game and posted on Symthic forums and subsequently on BF4 Reddit.
For a single game skill 60% of skill comes from SPM (capped at 1000), 30% comes from KPM (capped at 3.0), and 10% comes from KDR (capped at 5.0).
BTW. note that these calculations use SPM which excludes any bonuses and boosts (ie. as shown on scoreboard), while BattleLog displays SPM including bonuses and boosts.
To calculate this you first have to normalize each component:
normalized_SPM = min(SPM/1000.0, 1)
normalized_KPM = min(KPM/3.0, 1)
normalized_KDR = min(KDR/5.0, 1)
Now apply the percentages :
normalized_skill = .6 * normalized_SPM
+ .3 * normalized_KPM
+ .1 * normalized_KDR
skill = round(normalized_skill * 1000)
So above is skill for just one game. But what's is displayed in BattleLog is overall skill, which is calculated to the formula is 90% skill prior to current game + 10% current skill:
new_skill = round(.9 * old_skill + .1 current_game_skill)
In the battle report you can also see how the skill changed, which is calculated as follows:
skill_diff = new_skill - old_skill
You had very intense game which lasted 20 minutes, in which you scored 5000 game points (not including bonuses and boosts), killed 30 people and died 45 times.
normalized_SPM = (5000/20.0)/1000 = .25
normalized_KPM = (30/20.0)/3 = .5
normalized_KDR = (30.0/45.0)/5 = .13
normalized_skill = .6*.25 + .3*.5 + .1 * .13 = 0.3133
this_round_skill = round(0.3133 * 1000) = 313
So if you'd play all rounds like that your skill would be 313.
Now another example, suppose in the same 20 minute game you were camping instead, you got 1000 points, 6 kills, 0 deaths (which counts as 1 actually). As said KDR is capped at 5, so that's what you put into the calculation.
normalized_SPM = (1000/20.0)/1000 = .05
normalized_KPM = (6/20.0)/3 = .1
normalized_KDR = (5.0/1)/5 = 1
normalized_skill = .6*.05 + .3*.1 + .1 * 1 = 0.16
this_round_skill = round(0.16 * 1000) = 160
OK, so suppose that you're starting skill was 186, in the first example
new_skill = round(.9 * 186 + .1 * 313) = 199
diff = +13
In second example:
new_skill = round(.9 * 186 + .1 * 160) = 183
diff = -3
So that's how it's calculated. This does not have anything to do with playing the objective, in fact if you just spam on Operation Metro, your skill is going to be way higher, than lets say trying to arm MComs on Operation Whiteout rush.