When a branch mispredicts, some instructions from the mispredicted path still move through the pipeline. All work performed on these instructions is wasted since they would not have been executed had the branch been correctly predicted. The Branch Mispredict metric is defined as a ratio of cycles of wasted work due to branch mispredictions to all cycles.
A significant proportion of branches are mispredicted, leading to excessive wasted work. Start with identifying heavily mispredicted branches. Account for skid. Consider ways to make your algorithm more predictable or to reduce the number of branches. You can move 'if' statements as high as possible in the code flow (that is, as early as possible, and containing as much as possible). If using 'switch' or 'case' statements, put the most commonly executed cases first. Avoid using virtual function pointers for heavily executed calls.