def calculate_fnc(sub, targets, features):
sub = (sub.rank(method="first").values - 0.5) / len(sub)
# Neutralize submission to features
sub -= f.dot(np.linalg.pinv(f).dot(sub))
sub = pd.Series(np.squeeze(sub)) # Convert np.ndarray to pd.Series
# FNC: Spearman rank-order correlation of neutralized submission to target
fnc = np.corrcoef(sub.rank(pct=True, method="first"), targets)[0, 1]