1. Introduction
  2. Data Scaling
  3. Hyperparameter Search
  4. Multilayer Perceptron
  5. Main Code
  6. Results

1. Introduction

Continuing our series of articles exploring the prediction of BB% and K% from plate discipline values, we use the Keras library to construct neural networks. We also perform a random hyperparameter search, applying a performance threshold to keep good models, thus creating an ensemble of multilayer perceptrons (MLPs). The predictions of individual MLPs are then combined to create an ensemble prediction.

See previous articles in this series for results and access to the data.

2. Data Scaling

Keeping both the input data and output data for neural networks to small single digit values facilitates training. Thus, features are scaled to values between 0 and 1 and targets are divided by 100 to convert %s to fractions. Scaling of the features is done on all calibration data (the data that will be used to train and validate the MLPs) and the scaler is saved so that it can be applied to production data (unseen data from 2019).

3. Hyperparameter Search

import numpy as np
from sklearn.model_selection import ParameterGrid
from sklearn.model_selection import ParameterSampler
    
def parameters(grid_type, num_samples):    
    batch_size = [64, 128]
    dropout = np.linspace(0.0, 0.5, num=11, endpoint=True)
    activation = ['relu','elu','linear']  # https://keras.io/activations/
    optimizer = ['adam','Nadam','Adadelta']  # https://keras.io/optimizers/ (see notes about defaults)
    l1_regularizer = [0.0, 0.0001, 0.001, 0.01]  # https://keras.io/regularizers/
    l2_regularizer = [0.0, 0.0001, 0.001, 0.01]  # https://keras.io/regularizers/
    
    layer_1_nodes_num = [16, 32, 64]
    layer_2_nodes_num = [16, 32, 64]
        
    grid = {'batch_size':batch_size, 'dropout':dropout,
            'activation':activation, 'optimizer':optimizer, 
            'l1_regularizer':l1_regularizer, 'l2_regularizer':l2_regularizer,
            'layer_1_nodes_num':layer_1_nodes_num, 'layer_2_nodes_num':layer_2_nodes_num}
   
    if grid_type == 'deterministic':
        parameter_grid = list(ParameterGrid(grid))
    elif grid_type == 'stochastic':
        num_samples = min(num_samples, len(list(ParameterGrid(grid))))
        parameter_grid = list(ParameterSampler(grid, n_iter=num_samples))
    else:
        print('\ninvalid grid_type in parameters():',grid_type)
        raise NameError
    
    return parameter_grid

The scikit-learn classes ParameterGrid and ParameterSampler are the classes underneath the hood of GridSearchCV and RandomizedSearchCV respectively. We create lists of parameters for feature scalers, transformers, selectors, as well as machine learning algorithms. These lists are then stored in a dictionary which is sent to ParameterGrid or ParameterSampler. Then we convert the output of these to lists in which each element is a dictionary of parameter values. ParameterGrid yields all parameters, while ParameterSampler yields n_iter random samples.

Which one should be used? This depends on the number of possible or desirable parameters, the specific algorithms used, size of the data, and access to computing power. A rule of thumb is that for a small number of parameters and fast algorithms, ParameterGrid will work well. For more numerous parameters and slow algorithms, ParameterSampler is a better choice as the total number of parameter sets to be sampled can be specified, without limiting the parameter space as would be the case with ParameterGrid. Additionally, as we show below, we can specify a time limit for the entire problem. This allows us to use expansive lists of parameters and then set n_iter to an arbitrarily large number. Setting a maximum time limit is crucial when running jobs on cloud computers and paying by the hour.

4. Multilayer Perceptron

def mlp(x_train, y_train, x_valid, y_valid, num_epochs, verbosity, 
        results_dir, model_name, stop_epochs, param_dict, mse_baseline):   
    epoch_best_early_stop = -1   
    input_units = len(x_train[0])    
    loss_type = 'mse'
    metric = 'mean_squared_error'

    # set up the mlp
    callbacks_list = [EarlyStopping(monitor='val_loss', patience=stop_epochs)]                
    l1_reg = param_dict['l1_regularizer']
    l2_reg = param_dict['l2_regularizer']
            
    # create the mlp
    model_mlp = Sequential()    
    model_mlp.add(Dense(param_dict['layer_1_nodes_num'], 
                        activation=param_dict['activation'],
                        kernel_regularizer=regularizers.l1_l2(l1=l1_reg, l2=l2_reg),
                        activity_regularizer=regularizers.l1_l2(l1=l1_reg, l2=l2_reg),
                        input_shape=(input_units,)))
    model_mlp.add(Dropout(param_dict['dropout']))
        
    num_nodes_layer_2=min(param_dict['layer_2_nodes_num'],param_dict['layer_1_nodes_num'])
    model_mlp.add(Dense(num_nodes_layer_2, 
                        activation=param_dict['activation'],
                        kernel_regularizer=regularizers.l1_l2(l1=l1_reg, l2=l2_reg),
                        activity_regularizer=regularizers.l1_l2(l1=l1_reg, l2=l2_reg)))
    model_mlp.add(Dropout(param_dict['dropout']))    
    model_mlp.add(Dense(1))
    
    # compile the model
    model_mlp.compile(optimizer=param_dict['optimizer'], 
                      loss=loss_type, metrics=[metric])
    
    # fit the model
    h = model_mlp.fit(x_train, y_train, epochs=num_epochs, 
                      batch_size=param_dict['batch_size'],
                      validation_data=(x_valid, y_valid), 
                      callbacks=callbacks_list, verbose=verbosity)
    
    # determine if model should be saved
    metric_value = np.min(h.history['val_' + metric])
    if metric_value < mse_baseline:
        epoch_best_early_stop = len(h.history['val_loss']) - stop_epochs
        model_mlp.save(results_dir + model_name + '.h5')
        
    dict_return = {'stop_epochs':epoch_best_early_stop, metric:metric_value,
                   'model_name':model_name}
    
    return dict_return

param_dict is a single element of the list from the parameters() function that contains a dictionary of hyperparameters specified in that function. We have 2 hidden layers and some coding to ensure that the 2nd layer does not have more nodes than the first. We also use early stopping, training ends when the loss on the validation data does not decrease for stop_epochs epochs.

mse_baseline is a value of the mean squared error set so that if the error on the validation data is smaller, we save the model to be possibly used later as part of an ensemble of MLPs. The value for mse_baseline was chosen based on previous results.

In addition to using early stopping to prevent overfitting, we also use regularizaton and dropout. Later we will use ensembles.

5. Main Code

import numpy as np
import pandas as pd
from pathlib import Path
import time
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from joblib import dump

if __name__ == '__main__':
    base_dir = YOUR PATH
    data_direct = base_dir + 'data/'
        
    # preprocessing
    data_type = 'min_max_scaler'
    x_train1 = np.load(data_direct + 'x_train1.npy')
    x_train2 = np.load(data_direct + 'x_train2.npy')
    x_test = np.load(data_direct + 'x_test.npy')
    
    if data_type == 'min_max_scaler':
        scaler = MinMaxScaler().fit(np.vstack(([x_train1, x_train2, x_test])))
    elif data_type == 'standard_scaler':
        scaler = StandardScaler().fit(np.vstack(([x_train1, x_train2, x_test])))
    else:
        raise NameError
        
    x_raw = np.vstack(([x_train1, x_train2, x_test]))
    x_scaled = scaler.transform(x_raw)
        
    target_multiplier = 0.01  # convert % to fraction
        
    verbose = 0
    epochs = 1000
    checkpoint_epochs_stop = 10
    size_of_parameter_list = 1000
       
    # limits
    max_time_minutes = 180
    dict_mse_baseline = {'bb':0.0009, 'k':0.00077}
       
    for target_type in ['BB','K']:
        list_dict_results = []
        start_time = time.time()
        print('\n*** starting',target_type,' at',pd.Timestamp.now())
        tt = target_type.lower()
            
        y_train1 = np.load(data_direct + 'y_train1_' + tt + '.npy')*target_multiplier        
        y_train2 = np.load(data_direct + 'y_train2_' + tt + '.npy')*target_multiplier 
        y_test = np.load(data_direct + 'y_test_' + tt + '.npy')*target_multiplier       
        y_scaled = np.hstack(([y_train1, y_train2, y_test]))
                 
        results_direct = base_dir + 'results_keras_' + data_type + '_' + tt + '/'
        if not Path(results_direct).is_dir():
            os.mkdir(results_direct)
            
        # save scaler (one copy each for bb and k directories)
        dump(scaler, results_direct + data_type + '.joblib')
        
        list_parameter_dictionary = parameters('stochastic', size_of_parameter_list)
        
        for iparam in range(size_of_parameter_list):        
            modelname = 'keras_' + data_type + '_' + tt + '_' + str(iparam)
            
            xtrain, xvalid, ytrain, yvalid = train_test_split(x_scaled, y_scaled, 
                                             train_size=0.66, shuffle=True)
        
            dict_mlp_results = mlp(xtrain, ytrain, xvalid, yvalid,
                                   epochs, verbose, results_direct, modelname,
                                   checkpoint_epochs_stop, list_parameter_dictionary[iparam],
                                   dict_mse_baseline[tt])
            
            if dict_mlp_results['stop_epochs'] > 0:
                list_parameter_dictionary[iparam].update(dict_mlp_results)
                list_dict_results.append(list_parameter_dictionary[iparam])
                
            # check elapsed time for early stopping
            elapsed_time_minutes = (time.time() - start_time)/60
            if elapsed_time_minutes > max_time_minutes:
                break
        
        print('\n*** ending',target_type,' elapsed time =',(time.time()-start_time)/60,' min')
        
        # collect results in a df, then save
        df_param_results = pd.DataFrame(data=list_dict_results)
        df_param_results.to_pickle(results_direct + 'df_parameter_results.pkl')
        df_param_results.to_csv(results_direct + 'df_parameter_results.csv')
        list_dict_results.clear()

Let us walk through the code. First, we read in the calibration data, then scale the features and targets, remembering to save the scaler for use on production data later. Then we loop over the randomized list of hyperparameters and also randomly create training and validation data. Next, the MLP is constructed and evaluated and if the results pass the threshold test, we save all of the parameters into a dictionary then to a list which will eventually be saved in a DataFrame. The MLPs are saved in the mlp() function. Note the time test that provides total run time control.

Since this is a small MLP with a small data set, we could have used N fold cross validation, which would be executed inside of the mlp() function. However, this code was adapted from code using RNNs on a larger data set which prompted us to take this approach. By randomizing the training and validation data with each set of hyperparameters, as well as using various methods to prevent overfitting, we have something that is akin to traditional cross validation. Also, due to the expense of the larger problem alluded to, we decided not to throw away good results and keep only a single best result as is usually done with cross validation. Here, we use the threshold error value to save all good results, and later we use the best N to create an ensemble of MLPs, thus further mitigating overfitting.

6. Results

Below are the top 5 best results, based on validation error, that will be used to construct ensembles of MLPs. The numbers under model_name refer to model # from the loop over the list of randomized hyperparameters.

Hyperparameters BB%

optimizerlayer_2_nodes_numlayer_1_nodes_numl2_regularizerl1_regularizerdropoutbatch_sizeactivationstop_epochsmean_squared_errormodel_name
Nadam166400064relu390.0002457343keras_min_max_scaler_bb_42
adam64640.000100.4564relu2300.000252506keras_min_max_scaler_bb_20
Nadam64320.000100.464relu1580.0002586365keras_min_max_scaler_bb_109
Nadam64320.000100128elu3170.0002604809keras_min_max_scaler_bb_39
adam16160.00010064elu5640.0002750261keras_min_max_scaler_bb_125

Validation Errors BB%

 # 42# 20# 109# 39# 125Median
Mean Squared Error5.110832.548662.874442.72272.54662.49386
Median Absolute Error1.612221.058231.062121.021291.113171.01067

Hyperparameters %K

optimizerlayer_2_nodes_numlayer_1_nodes_numl2_regularizerl1_regularizerdropoutbatch_sizeactivationstop_epochsmean_squared_errormodel_name
adam326400.0001064elu2370.0005798198keras_min_max_scaler_k_107
adam32320.000100128relu3720.000622873keras_min_max_scaler_k_12
Nadam64160.000100.4564linear4270.0006296203keras_min_max_scaler_k_63
Adadelta16160.00010.0001064elu2360.0006304131keras_min_max_scaler_k_50
adam16640.00010.00010.164elu2640.0006403051keras_min_max_scaler_k_83

Validation Errors K%

 # 107# 12# 63# 50# 83Median
Mean Squared Error8.145197.197097.2642410.524198.096617.4783
Median Absolute Error1.949831.829441.97472.057062.022081.98193

We read in the saved models, then the 2019 data (using the saved scaler to scale features).

import pandas as pd
import os
from pathlib import Path

if __name__ == '__main__':
    base_direct = YOUR PATH
    data_direct = base_direct + 'data/'
    
    df_calibration = pd.read_pickle(data_direct + 'df_calibration.pkl')
    df_production = pd.read_pickle(data_direct + 'df_plate_discipline_hitters_2019.pkl')
    
    header_attr = ['O-Swing%', 'Z-Swing%', 'Swing%', 'O-Contact%',
                   'Z-Contact%','Contact%', 'Zone%', 'F-Strike%', 'SwStr%']
    
    for target_type in ['BB%','K%']:
        
        tt = target_type[:-1].lower()
        results_direct = base_direct + '2019_results_keras_mlp_ensemble_' + tt + '/'
        if not Path(results_direct).is_dir():
            os.mkdir(results_direct)
            
        p1 = 'results_keras_min_max_scaler_' + tt +'_aws/'
        p2 = 'results_keras_min_max_scaler_' + tt + '/'
        model_direct = base_direct + p1 + p2
        
        number_of_models = 5
        y_multiplier = 100.0  # convert fract to %
        keras_mlp_ensemble(df_production, header_attr, target_type, model_direct, results_direct,
                           number_of_models, y_multiplier)
        os.chdir(base_direct)

We then use each of the 5 saved MLPs to make predictions for 2019 and take the median of the results as our ensemble result.

import pandas as pd
import numpy as np
import os
import joblib
from keras.models import load_model

def keras_mlp_ensemble(dfprod, header_features, header_target, 
                       model_dir, results_dir, num_models, y_mult):   
    # change to model directory
    os.chdir(model_dir)
    
    x_raw = dfprod[header_features].values
    scaler = joblib.load('min_max_scaler.joblib')
    x = scaler.transform(x_raw)
    y = dfprod[header_target].values
    
    dfresults = pd.DataFrame(data=dfprod['Name'], index=dfprod.index)
    dfresults['Team'] = dfprod['Team']
    dfresults[header_target] = dfprod[header_target]
    
    dferrors = pd.DataFrame(index=['mean_squared_error','median_absolute_error'])
        
    # determine and load top num_models
    df_params_models = pd.read_pickle(model_dir + 'df_parameter_results.pkl')
    df_params_models.sort_values(by='mean_squared_error', ascending=True, 
                                 inplace=True)
    df_params_models = df_params_models[:num_models]
            
    list_y_predicted = []
    for model_name in df_params_models['model_name'].values:
        ml_model = load_model(model_name + '.h5')
        y_predicted = (ml_model.predict(x))*y_mult  # convert fract to %
        dfresults[model_name] = y_predicted
        list_y_predicted.append(y_predicted)
        neg_mean_squared_error = mean_squared_error(y, y_predicted)
        neg_median_absolute_error = median_absolute_error(y, y_predicted)
        dferrors[model_name] = [neg_mean_squared_error, neg_median_absolute_error]
                
    # change to results directory
    os.chdir(results_dir)
           
    # compute median of results
    #y_all = np.vstack(tuple(list_y_predicted)).T
    y_all = np.hstack(tuple(list_y_predicted))
    assert(y_all.shape == (dfprod.shape[0],num_models))
    y_all_median = np.median(y_all, axis=1)

    dfresults['Median'] = y_all_median
    dfresults['Median - Actual'] = y_all_median - y
    neg_mean_squared_error = mean_squared_error(y, y_all_median)
    neg_median_absolute_error = median_absolute_error(y, y_all_median)
    dferrors['Median'] = [neg_mean_squared_error, neg_median_absolute_error]
    
    # save results
    ht = header_target[:-1].lower()
    dfresults = dfresults.round(decimals=3)
    dfresults.to_csv(results_dir + 'df_results_' + ht + '.csv')
    dferrors = dferrors.round(decimals=5)
    dferrors.to_csv(results_dir + 'df_errors_' + ht + '.csv')

2019 Ensemble Errors

 BB% Mean Squared ErrorBB% Median Absolute ErrorK% Mean Squared ErrorK% Median Absolute Error
Ensemble2.4931.0117.4781.981

2019 Results K%

NameTeamK%# 107# 12# 63# 50# 83MedianMedian - Actual
Christian YelichBrewers20.322.73321.17423.67622.10823.03322.7332.433
Mike TroutAngels2017.68617.88819.28317.52219.45317.888-2.112
Yordan AlvarezAstros25.522.3322.38823.83921.62323.34222.388-3.112
Alex BregmanAstros1214.21814.43416.03214.39916.6314.4342.434
Nelson CruzTwins25.126.81726.18127.76725.94926.83126.8171.717
David FreeseDodgers23.727.17227.90728.47525.98627.13427.1723.472
Cody BellingerDodgers16.419.99319.66421.42719.0721.15919.9933.593
Anthony RendonNationals13.310.8911.20112.92911.36213.55811.362-1.938
Ketel MarteDiamondbacks13.713.93314.60816.0913.92516.16914.6080.908
Mitch GarverTwins24.223.50523.3824.923.32524.29223.505-0.695
Joey GalloRangers38.436.11238.52637.5836.01835.7636.112-2.288
George SpringerAstros20.323.36124.44924.62322.51523.83623.8363.536
Howie KendrickNationals13.214.72115.65816.98314.55516.5415.6582.458
Fernando Tatis Jr.Padres29.629.33729.92530.16428.55228.71529.337-0.263
Juan SotoNationals2020.22520.73921.55319.77921.28220.7390.739
Nolan ArenadoRockies1416.1817.26218.40215.86118.04417.2623.262
Anthony RizzoCubs1415.55316.94217.92615.49718.18316.9422.942
Xander BogaertsRed Sox17.519.2419.23321.03218.79320.61319.241.74
Keston HiuraBrewers30.731.02732.2232.19230.01330.51631.0270.327
Charlie BlackmonRockies16.416.60717.20518.60516.05918.09217.2050.805
Freddie FreemanBraves18.418.27118.46219.84917.46819.65218.4620.062
J.D. MartinezRed Sox2121.80821.89123.03821.09222.16921.8910.891
Mark CanhaAthletics21.521.07322.43722.62820.07622.08122.0810.581
Jeff McNeilMets13.213.73714.20516.18913.39215.78214.2051.005
Bo BichetteBlue Jays23.620.25421.34522.47219.16821.75421.345-2.255
Peter AlonsoMets26.423.56324.03825.08822.69224.37724.038-2.362
Jordan LuplowIndians23.421.92522.2823.07121.07322.57222.28-1.12
Aaron JudgeYankees31.531.75132.96732.96631.31231.33131.7510.251
Eugenio SuarezReds28.525.18725.52126.39724.53325.31425.314-3.186
Carlos CorreaAstros23.422.04122.93323.63921.18922.98122.933-0.467
Mookie BettsRed Sox14.314.00714.19515.84114.34516.22214.3450.045
Trevor StoryRockies26.522.2622.13623.56321.43222.81222.26-4.24
Carlos SantanaIndians15.718.44318.56119.92418.10519.89118.5612.861
Austin MeadowsRays22.221.02821.17322.52120.37521.78721.173-1.027
Kris BryantCubs22.922.73222.92823.91921.77923.2222.9280.028
Yoan MoncadaWhite Sox27.527.59828.51128.75426.69927.19627.5980.098
Miguel SanoTwins36.232.64434.09433.69932.0632.09332.644-3.556
Josh BellPirates19.219.81619.93121.2219.03420.9319.9310.731
Jorge SolerRoyals26.227.14127.17128.07526.50426.83627.1410.941
Josh DonaldsonBraves23.525.95725.95727.09824.64926.27625.9572.457
Hunter PenceRangers21.825.95626.78727.63424.74526.6226.624.82
Rafael DeversRed Sox1718.42619.54520.83917.59220.32819.5452.545
DJ LeMahieuYankees13.713.70614.28815.90813.72915.94314.2880.588
Jose AltuveAstros1517.39118.16619.58416.77819.13818.1663.166
J.D. DavisMets21.423.74822.73924.84322.07523.86523.7482.348
Trey ManciniOrioles21.122.40123.74623.98621.3823.09223.0921.992
Marcus SemienAthletics13.716.33517.29618.10216.06917.91817.2963.596
Max MuncyDodgers25.325.24525.91626.41724.33625.65425.6540.354
Mike FordYankees17.220.00920.93721.56519.58621.11920.9373.737
Matt JoyceBraves18.921.86121.78523.16920.96622.77321.8612.961
Bryan ReynoldsPirates22.221.01421.14422.28920.33921.56521.144-1.056
Justin TurnerDodgers1614.87915.17116.82414.47716.73215.171-0.829
Giovanny UrshelaYankees18.316.89417.72319.49616.12218.81217.723-0.577
Ronald Acuna Jr.Braves26.323.96924.25325.18322.70224.31924.253-2.047
Will SmithDodgers26.522.67323.85824.06722.07323.21523.215-3.285
Dominic SmithMets22.321.87923.24723.56321.00623.05323.0530.753
Willson ContrerasCubs24.926.54625.728.01625.51227.03626.5461.646
Matt OlsonAthletics25.223.69322.96125.05322.3224.36223.693-1.507
Ian HappCubs2525.60225.39126.74824.56525.52225.5220.522
Brad Miller- - -26.525.54125.54926.63724.47125.80925.549-0.951
Michael BrantleyAstros10.49.95211.04812.4310.61312.86411.0480.648
Corey Dickerson- - -20.119.71222.32922.62318.88922.18122.1812.081
Bryce HarperPhillies26.127.37226.97628.26726.41527.1827.181.08
Yuli GurrielAstros10.611.9112.71614.63112.09414.58312.7162.116
David DahlRockies26.625.0124.7726.63223.83725.64725.01-1.59
Mike TauchmanYankees2418.65419.63620.10817.89419.79319.636-4.364
Tim AndersonWhite Sox2118.87217.89720.68918.27419.77118.872-2.128
Cameron MaybinYankees26.825.45126.07226.71924.57225.69525.695-1.105
Edwin Encarnacion- - -21.222.44722.91823.95521.44923.41722.9181.718
Joc PedersonDodgers21.620.68421.30222.2819.77621.73821.302-0.298
Yasmani GrandalBrewers2223.31424.77524.71822.56424.1324.132.13
Luis ArraezTwins7.97.32110.0339.9868.49211.189.9862.086
Aristides AquinoReds26.728.6527.07129.84927.52628.71128.651.95
Hunter DozierRoyals25.323.82322.42524.80623.37523.69923.699-1.601
Luke VoitYankees27.829.40829.49530.31828.6829.03429.4081.608
Gleyber TorresYankees21.422.34222.71423.73621.39222.87122.7141.314
Wilmer FloresDiamondbacks10.910.2511.11512.95310.60813.24711.1150.215
Andrew McCutchenPhillies2124.8826.126.1824.24125.46325.4634.463
Michael ConfortoMets2322.55222.83823.83921.47323.14222.838-0.162
Lourdes Gurriel Jr.Blue Jays25.127.68527.53229.3526.5428.06627.6852.585
Nicholas Castellanos- - -21.521.53619.76422.9120.75421.9521.5360.036
Kyle SchwarberCubs25.624.48824.76725.69523.53124.93724.767-0.833
Tommy EdmanCardinals17.516.27216.91918.35815.79617.91216.919-0.581
Ramon LaureanoAthletics25.625.05925.69726.31724.26924.88625.059-0.541
Trea TurnerNationals19.919.99119.3421.47719.44620.71719.9910.091
Max KeplerTwins16.616.05116.62917.79115.93217.36516.6290.029
Tom MurphyMariners3127.1527.66428.17726.31726.9627.15-3.85
Matt ChapmanAthletics21.921.41121.79122.79320.41822.25321.791-0.109
Brandon LoweRays34.631.62333.03632.71430.75131.0231.623-2.977
Ryan BraunBrewers20.720.51819.23321.96319.8721.11120.518-0.182
Ozzie AlbiesBraves1616.92417.45318.91516.27418.34817.4531.453
Eric ThamesBrewers30.527.58127.43628.55726.64327.3427.436-3.064
Shin-Soo ChooRangers2526.86827.71328.16726.19527.06327.0632.063
Starling MartePirates1619.70720.34221.40718.8820.64320.3424.342
Mike YastrzemskiGiants2623.31623.50224.6622.03423.68823.502-2.498
Jorge PolancoTwins16.515.2915.85117.23615.09717.13415.851-0.649
Shohei OhtaniAngels25.922.03622.00423.57720.95822.96522.036-3.864
Danny SantanaRangers29.525.32724.91526.82824.23925.55725.327-4.173
Tommy La StellaAngels8.712.4211.90814.45612.41514.47612.423.72
Jesse WinkerReds15.615.63915.78817.33815.27317.31915.7880.188
Willie CalhounRangers15.712.60613.15415.00412.70915.13913.154-2.546
Francisco LindorIndians1512.11112.74914.54712.31414.69212.749-2.251
Tommy PhamRays18.819.19620.35320.80518.95620.54420.3531.553
Mike MoustakasBrewers16.818.71519.37820.3918.15720.14219.3782.578
Ji-Man ChoiRays22.222.9324.53424.25422.16923.46123.4611.261
Mitch MorelandRed Sox22.124.12923.625.2523.06824.42424.1292.029
Javier BaezCubs27.828.83628.56430.28127.75628.86328.8361.036
Rhys HoskinsPhillies24.521.46222.14922.89320.6422.54222.149-2.351
Gary SanchezYankees2827.14928.19528.50826.23827.49727.497-0.503
Paul GoldschmidtCardinals24.322.50623.6224.29121.20723.45923.459-0.841
Donovan SolanoGiants21.515.66616.82718.32915.30517.82316.827-4.673
Christian WalkerDiamondbacks25.723.17123.33524.27322.17923.51823.335-2.365
Aledmys DiazAstros11.317.13817.66418.82917.05418.49917.6646.364
Omar NarvaezMariners19.118.8918.6220.51817.74620.04618.89-0.21
Brett GardnerYankees19.618.44618.49420.04818.24819.83518.494-1.106
Jose AbreuWhite Sox21.920.57319.3322.14619.9721.35920.573-1.327
Jake CaveTwins31.126.72326.49527.51426.01426.37726.495-4.605
Eloy JimenezWhite Sox26.627.19227.32328.61226.06127.28227.2820.682
Cavan BiggioBlue Jays28.623.45625.70425.28923.74324.91524.915-3.685
Brian AndersonMarlins21.923.3321.76424.69722.52923.59723.331.43
Eric Sogard- - -14.312.29612.77814.70512.65715.18312.778-1.522
Adam EatonNationals16.215.53916.17417.47515.39317.36716.174-0.026
Alex VerdugoDodgers1314.61715.36416.71514.66916.53415.3642.364
Yandy DiazRays17.618.90319.86520.41518.21820.00519.8652.265
Eduardo EscobarDiamondbacks18.619.46621.06921.77918.76521.19821.0692.469
Alex Dickerson- - -22.119.06719.60320.73318.45520.09719.603-2.497
Corey SeagerDodgers18.120.11920.6821.41519.50920.7820.682.58
Byron BuxtonTwins23.124.15923.67425.39223.1424.23724.1591.059
Whit MerrifieldRoyals17.116.61817.22918.77816.02218.35717.2290.129
J.T. RealmutoPhillies20.719.11919.73920.87518.40120.3219.739-0.961
Brandon NimmoMets2824.4225.78125.80823.94625.05425.054-2.946
Kevin NewmanPirates11.710.85411.92513.67511.34413.72211.9250.225
Carson KellyDiamondbacks21.620.46220.84221.91819.86121.4620.842-0.758
Franmil Reyes- - -28.530.55530.93331.57429.54630.04830.5552.055
Victor CaratiniCubs21.119.25320.02120.78718.81720.220.021-1.079
David PeraltaDiamondbacks20.620.19920.3722.07619.42921.19820.37-0.23
Marcell OzunaCardinals20.823.0222.35624.21122.3223.4723.022.22
Kurt SuzukiNationals11.715.78916.27417.78315.29517.24416.2744.574
Austin NolaMariners23.621.25822.41722.7120.65421.95821.958-1.642
Garrett CooperMarlins26.118.920.85121.24318.23720.62620.626-5.474
Robinson ChirinosAstros28.628.55428.99729.61927.63128.17828.554-0.046
Pablo SandovalGiants22.620.79522.24823.04419.76822.39822.248-0.352
David BoteCubs26.127.6527.89328.75226.73127.58927.651.55
Jonathan VillarOrioles24.622.60323.03823.98521.41623.13623.038-1.562
Manny MachadoPadres19.420.33420.42621.86219.68921.19820.4261.026
Jose RamirezIndians13.713.06213.3715.15313.24215.47413.37-0.33
Avisail GarciaRays23.626.12924.69627.22525.01426.0526.052.45
Phillip ErvinReds24.224.37523.84125.50623.40824.58924.3750.175
Derek DietrichReds24.225.55724.93926.71924.43525.75125.5571.357
Kolten WongCardinals15.114.36915.04716.38514.37516.34715.047-0.053
Shed LongMariners23.822.85123.92824.26421.7123.29523.295-0.505
Clint FrazierYankees28.527.70928.43528.87927.31627.71327.713-0.787
Brock HoltRed Sox19.316.72717.32218.59716.38518.26417.322-1.978
Daniel VogelbachMariners26.725.75326.80427.12624.89226.51326.513-0.187
A.J. PollockDodgers21.622.85221.44724.05222.25723.03922.8521.252
James McCannWhite Sox28.825.20125.14126.49524.24425.26125.201-3.599
Brian GoodwinAngels28.225.76326.40327.08824.72525.93425.934-2.266
Nick MarkakisBraves12.611.57911.91313.99211.87114.54611.913-0.687
Joey VottoReds20.217.25517.97818.80216.72318.65417.978-2.222
Kyle SeagerMariners19.417.81318.11319.4617.31219.11718.113-1.287
Christian VazquezRed Sox19.417.06517.84419.20616.47218.56917.844-1.556
Stephen VogtGiants23.621.32822.26623.13820.51722.62822.266-1.334
Asdrubal Cabrera- - -2017.85418.17119.59217.21419.22118.171-1.829
Chris TaylorDodgers27.827.09527.5628.24926.26826.92627.095-0.705
Yasiel Puig- - -21.822.62923.03623.93521.60123.03923.0361.236
Tyler NaquinIndians22.420.90121.88822.95319.75421.97221.888-0.512
Kole CalhounAngels25.627.39427.47728.38926.59127.20927.3941.794
Ryan McMahonRockies29.726.9427.20428.01825.7126.80226.94-2.76
Andrew BenintendiRed Sox22.819.27719.3920.99518.25820.46519.39-3.41
Brian DozierNationals21.822.7924.0624.09722.1323.54523.5451.745
Vladimir Guerrero Jr.Blue Jays17.719.86420.7621.45319.18520.79820.763.06
Scott KingeryPhillies29.427.34927.56828.5526.26127.19227.349-2.051
Eddie RosarioTwins14.614.20515.6217.39714.09217.36315.621.02
Nathaniel LoweRays29.621.29719.59422.44820.83721.8521.297-8.303
Todd FrazierMets21.222.78422.18324.10522.0823.43222.7841.584
Jason CastroTwins3232.05633.43433.15430.90431.69732.0560.056
Daniel MurphyRockies15.510.43411.37313.1111.02513.44111.373-4.127
Ian DesmondRockies24.722.42122.27423.76921.67922.90222.421-2.279
Jason HeywardCubs18.718.31118.84520.00317.83419.76118.8450.145
Mike FreemanIndians28.622.69323.60324.14121.60323.03923.039-5.561
Wilson RamosMets13.215.62916.46317.77615.19617.23316.4633.263
Nomar MazaraRangers2322.05123.623.98621.12423.25923.2590.259
Jon BertiMarlins25.422.61724.15224.0221.85523.16323.163-2.237
Domingo SantanaMariners32.328.3229.23229.44527.19928.08628.32-3.98
Ehire AdrianzaTwins16.915.35915.79517.2215.09716.99815.795-1.105
Dexter FowlerCardinals24.723.06324.14324.34722.12823.67723.677-1.023
Roberto PerezIndians28.327.98328.62929.22327.05128.07428.074-0.226
Mitch HanigerMariners28.625.46426.2426.71424.74825.62625.626-2.974
Aaron HicksYankees28.227.95928.22529.10527.00828.11528.115-0.085
C.J. CronTwins21.421.51221.61523.12920.61922.30721.6150.215
Teoscar HernandezBlue Jays3328.15329.15329.40626.93228.07628.153-4.847
Victor ReyesTigers21.916.39417.37818.90615.93718.50617.378-4.522
Jonathan SchoopTwins2525.90124.60727.10624.83925.87125.8710.871
Matt BeatyDodgers12.314.61915.53916.6914.74616.66215.5393.239
Justin SmoakBlue Jays21.221.36521.10122.65521.05422.3121.3650.165
Alex AvilaDiamondbacks33.832.45534.30934.16632.32532.8532.85-0.95
Michael ChavisRed Sox33.232.12533.20133.21531.17931.55432.125-1.075
Renato NunezOrioles23.923.15322.57724.69122.26123.74623.153-0.747
Jose MartinezCardinals2220.84821.46222.45320.09821.83921.462-0.538
Evan LongoriaGiants2221.79522.90523.54220.77622.80422.8040.804
Paul DeJongCardinals22.421.00321.83722.47220.22221.60821.608-0.792
Anthony SantanderOrioles21.215.49716.82818.19115.29718.02916.828-4.372
Oscar MercadoIndians17.419.14519.31420.63318.78219.94319.3141.914
Austin SlaterGiants30.728.50829.28429.62427.65528.46728.508-2.192
Adam FrazierPirates12.312.61712.94814.81412.65715.01312.9480.648
Hunter RenfroePadres31.226.54926.67627.85925.51626.65426.654-4.546
Jose OsunaPirates16.817.60718.16419.66416.82419.09718.1641.364
Neil WalkerMarlins20.221.99422.1223.39821.19422.67722.121.92
Brandon BeltGiants20.617.65417.75119.19517.13718.96417.751-2.849
Alex GordonRoyals15.817.48117.90119.20317.04318.79517.9012.101
Chance SiscoOrioles30.825.42926.06726.5624.36325.69225.692-5.108
Greg GarciaPadres22.315.86416.29717.6816.18417.89216.297-6.003
Miguel CabreraTigers19.719.44519.67121.35518.820.65619.671-0.029
Hanser AlbertoOrioles9.19.44811.40313.09810.19413.03211.4032.303
Amed RosarioMets18.919.45719.43721.27818.80120.51419.4570.557
Ender InciarteBraves17.816.50816.75918.30915.85418.02216.759-1.041
Jay Bruce- - -24.624.70623.4225.87423.67724.72824.7060.106
David FletcherAngels9.812.71412.59914.7913.15815.14813.1583.358
Dansby SwansonBraves22.823.79523.66524.96822.85524.18823.7950.995
Francisco MejiaPadres2319.50323.19622.74218.86722.18622.186-0.814
Victor RoblesNationals22.719.820.31221.41319.01520.65120.312-2.388
Wil MyersPadres34.329.46130.51430.81428.3529.28729.461-4.839
Josh VanMeterReds21.521.54122.52523.00520.77622.38422.3840.884
Pedro SeverinoOrioles21.419.89319.87821.23519.50420.80719.893-1.507
Trent GrishamBrewers26.221.99722.62923.35121.44922.77722.629-3.571
Curt CasaliReds2519.95721.17721.39519.73920.99920.999-4.001
Niko GoodrumTigers29.227.11927.09628.22926.11627.05227.096-2.104
Cesar HernandezPhillies1515.19515.79117.2714.9116.99715.7910.791
Colin MoranPirates23.319.15320.07321.06118.40120.28220.073-3.227
Jean SeguraPhillies11.812.48913.62515.31112.86615.30613.6251.825
Austin RomineYankees20.816.86517.56819.00616.17818.14917.568-3.232
Nick SenzelReds24.420.17920.71521.82419.16121.1620.715-3.685
Tim BeckhamMariners31.127.78428.95528.91826.97827.45327.784-3.315
Matt CarpenterCardinals26.223.1423.86224.38722.4123.78423.784-2.416
Nick AhmedDiamondbacks18.118.14818.61219.85817.56319.22618.6120.512
Jordy MercerTigers2120.69719.92422.25820.11321.48920.697-0.303
Travis d'Arnaud- - -21.723.23724.02524.83522.04923.76223.7622.062
Tim LocastroDiamondbacks17.620.12920.4322.29519.52921.56220.432.83
Jackie Bradley Jr.Red Sox27.328.47329.01229.66827.16128.32728.4731.173
Ryan ZimmermanNationals20.524.18724.15325.48123.47124.61424.1873.687
Marwin GonzalezTwins21.220.24320.83822.07219.41221.26520.838-0.362
Willy AdamesRays26.223.11324.44224.45722.21923.44123.441-2.759
Jorge AlfaroMarlins33.130.27629.731.82529.3130.54530.276-2.824
Adeiny Hechavarria- - -21.720.79921.62822.51919.85421.27221.272-0.428
JaCoby JonesTigers28.222.80722.65824.27421.98223.09822.807-5.393
Brian McCannBraves16.815.25615.82217.56214.97917.86915.822-0.978
Tyler FlowersBraves33.931.68633.59832.91830.82131.04331.686-2.214
Eric HosmerPadres24.423.53822.07624.73322.68123.86323.538-0.862
Adam HaseleyPhillies24.823.86623.41325.05622.9823.85123.851-0.949
Albert PujolsAngels12.516.17217.20418.38315.99318.23317.2044.704
Harold RamirezMarlins20.419.38919.50921.4518.68320.66619.509-0.891
Adam JonesDiamondbacks19.122.38121.04123.86221.51422.79222.3813.281
Ben GamelBrewers29.221.19920.07122.6120.85221.93321.199-8.001
Rowdy TellezBlue Jays28.426.54926.76928.27125.56427.19826.769-1.631
Robinson CanoMets16.313.81714.86116.26113.73915.99714.861-1.439
Tyler O'NeillCardinals35.134.97337.16636.26734.24634.2334.973-0.127
Manny PinaBrewers27.923.4823.46624.87922.39524.12623.48-4.42
Josh ReddickAstros1210.85311.42613.29611.213.48311.426-0.574
Ryon HealyMariners21.421.97921.13223.33421.59222.29821.9790.579
Freddy Galvis- - -24.623.16323.35724.90722.08123.91723.357-1.243
Jesus Aguilar- - -2222.90324.47524.47521.88723.68323.6831.683
Justin UptonAngels30.529.73931.19830.9828.9529.46929.739-0.761
Austin RileyBraves36.431.62731.5532.87330.58931.44931.55-4.85
Raimel TapiaRockies22.421.03521.65423.15719.86322.19821.654-0.746
Randal GrichukBlue Jays2622.98821.16924.25222.17423.18822.988-3.012
Starlin CastroMarlins16.415.5316.39617.65115.317.31316.396-0.004
Matt AdamsNationals34.527.73827.81328.86526.71627.4427.738-6.762
Stephen PiscottyAthletics21.424.91124.5426.23323.84225.02424.9113.511
Josh NaylorPadres22.918.73719.0120.75918.28420.39419.01-3.89
Jose IglesiasReds13.210.76712.48814.72511.33314.74312.488-0.712
Ronald GuzmanRangers29.526.21726.16927.42625.23126.1426.169-3.331
Kevan SmithAngels17.517.67318.36319.67617.17218.95618.3630.863
Gregory PolancoPirates29.325.15523.88426.1624.23725.26725.155-4.145
Miguel RojasMarlins11.814.77415.45417.06414.49216.62615.4543.654
Brandon DixonTigers32.430.28331.47731.50729.27529.78930.283-2.117
Chris IannettaRockies32.930.66132.11732.31230.31230.98330.983-1.917
Matt ThaissAngels31.727.33626.50828.14825.73327.06327.063-4.637
Ben ZobristCubs13.615.61917.19517.88615.65718.26617.1953.595
Yadier MolinaCardinals12.814.19715.25717.17713.83316.6915.2572.457
Lorenzo CainBrewers1716.69417.26118.50716.47818.14317.2610.261
Rougned OdorRangers30.624.76624.43225.98823.87924.97324.766-5.834
Enrique HernandezDodgers21.121.42120.49922.74220.74921.95521.4210.321
Jurickson ProfarAthletics14.516.71517.24418.5116.44818.34917.2442.744
Jason KipnisIndians17.217.61317.98919.27717.36518.84117.9890.789
Melky CabreraPirates10.310.59711.64913.35811.09913.43611.6491.349
Tucker BarnhartReds22.820.4420.78621.95819.73721.29120.786-2.014
Ildemaro VargasDiamondbacks11.411.36111.91513.89411.77914.2511.9150.515
Elvis AndrusRangers14.818.02818.26320.05917.56319.35118.2633.463
Dwight Smith Jr.Orioles20.924.89525.06926.06524.1924.8924.8953.995
Matt DuffyRays17.217.28717.83219.02617.11818.8317.8320.632
Robbie GrossmanAthletics17.815.02615.52116.81915.13917.01815.521-2.279
Dylan MooreMariners3324.38624.96825.65323.26324.73224.732-8.268
Tyler Austin- - -37.433.134.52834.17132.39832.46433.1-4.3
Luis RengifoAngels22.923.40923.4724.70722.32223.87323.470.57
Logan ForsytheRangers27.222.09724.80823.56621.58423.08423.084-4.116
Yan GomesNationals23.521.15623.1723.19720.19322.43822.438-1.062
Adalberto MondesiRoyals29.832.05233.03533.05331.13331.26932.0522.252
Chad PinderAthletics23.820.50921.74421.98419.5321.17621.176-2.624
Ryan GoinsWhite Sox2724.51724.84525.92623.48225.30824.845-2.155
Buster PoseyGiants1616.03416.67717.9215.81117.61516.6770.677
Kevin Pillar- - -13.811.62513.55114.97312.0414.81913.551-0.249
Didi GregoriusYankees15.416.44317.59718.62216.01318.00817.5972.197
Jacob StallingsPirates1921.19619.93222.77820.45121.87121.1962.196
Jake LambDiamondbacks24.323.62522.75724.79823.00924.03523.625-0.675
Addison RussellCubs24.126.41226.88927.86525.29426.3826.4122.312
Jake MarisnickAstros29.923.18722.5424.45622.32923.38123.187-6.713
Ty FrancePadres24.419.32520.65920.93418.5520.14820.148-4.252
Jake BauersIndians27.220.72221.00422.16320.16721.74821.004-6.196
J.P. CrawfordMariners2118.92920.07120.37718.0419.89219.892-1.108
Manuel MargotPadres2019.42620.29720.95718.79320.43620.2970.297
Adam EngelWhite Sox31.528.43429.48929.7227.35528.128.434-3.066
Russell MartinDodgers24.124.98227.08526.67124.86925.63725.6371.537
Delino DeShieldsRangers24.520.49821.95422.03319.94421.30121.301-3.199
Leury GarciaWhite Sox22.520.2520.57822.00819.3821.01620.578-1.922
Luis UriasPadres22.521.69922.78123.21920.64722.48622.486-0.014
Rio RuizOrioles21.321.02622.56922.4720.11521.69921.6990.399
Christin StewartTigers24.823.24323.0724.72322.323.75223.243-1.557
Harrison BaderCardinals28.824.41924.96225.78923.5524.70924.709-4.091
Harold CastroTigers23.319.87120.39522.12219.08821.20420.395-2.905
Matt WietersCardinals25.720.79322.422.65319.77122.05522.055-3.645
Garrett HampsonRockies26.921.24521.38722.68820.85522.13421.387-5.513
Billy McKinneyBlue Jays26.422.68522.58524.06521.9922.9122.685-3.715
Josh PhegleyAthletics18.420.59619.522.15919.96921.21920.5962.196
Guillermo HerediaRays2623.0723.6124.3221.84823.39523.395-2.605
Joey Rickard- - -26.519.59721.20921.42818.68820.78920.789-5.711
Andrelton SimmonsAngels8.711.81812.46714.13812.24214.21812.4673.767
Tony WoltersRockies16.516.92717.59818.70916.73118.26517.5981.098
Khris DavisAthletics27.428.43328.04629.25927.44628.09328.0930.693
Kyle FarmerReds29.925.91926.47727.6424.84426.44126.441-3.459
Willians AstudilloTwins3.92.5268.6316.3014.7247.2966.3012.401
Martin Maldonado- - -2321.53720.57623.02320.88621.9321.537-1.463
Gerardo Parra- - -19.618.74819.45720.57518.08719.97419.457-0.143
Cheslor CuthbertRoyals20.319.83321.47721.48819.08220.60420.6040.304
Welington CastilloWhite Sox29.526.28127.04527.62525.27626.3126.31-3.19
Steve WilkersonOrioles29.923.2724.18125.01522.38124.21624.181-5.719
Jonathan Lucroy- - -15.515.61215.79317.64815.46117.39215.7930.293
Tony Kemp- - -16.816.06716.49818.12515.39917.67116.498-0.302
Francisco Cervelli- - -25.623.11924.60124.61222.61823.52323.523-2.077
Derek Fisher- - -34.132.72934.54634.28432.43932.66732.729-1.371
Kevin KiermaierRays21.720.47521.24522.20419.52721.12621.126-0.574
Joe Panik- - -9.69.76110.78911.88110.39912.73410.7891.189
Jeimer CandelarioTigers25.623.29723.5724.75922.44623.78323.57-2.03
Ronny RodriguezTigers27.930.9331.89832.92829.92931.32531.3253.425
Dee GordonMariners14.513.0613.34615.51912.67915.0513.346-1.154
Andrew KnappPhillies31.925.47325.0526.59524.28225.45225.452-6.448
Maikel FrancoPhillies14.317.13117.98619.24716.61918.77517.9863.686
Yolmer SanchezWhite Sox21.119.39619.98821.32718.52920.66419.988-1.112
Brandon CrawfordGiants20.922.63123.06623.9221.52623.02523.0252.125
Yairo MunozCardinals20.421.68719.6623.41620.70221.86721.6871.287
Jarrod DysonDiamondbacks1919.35919.55820.85718.83820.53119.5580.558
Ryan CordellWhite Sox27.927.39427.90328.70326.21927.29827.394-0.506
Josh RojasDiamondbacks26.125.32225.66126.62624.04825.77125.661-0.439
Johan CamargoBraves17.319.54519.96621.49418.76820.69519.9662.666
Ryan O'HearnRoyals26.822.2421.59523.60721.46522.92822.24-4.56
Mallex SmithMariners24.925.32825.69926.5723.99425.32825.3280.428
Yonder Alonso- - -20.920.7620.29322.02120.20921.53720.76-0.14
Ian KinslerPadres19.217.17117.48218.97916.42118.45317.482-1.718
Austin DeanMarlins24.917.46217.75319.73517.10419.35217.753-7.147
Jon JayWhite Sox16.513.57414.06215.89413.41915.55914.062-2.438
Curtis GrandersonMarlins2722.60624.15524.07321.96623.29723.297-3.703
Joey WendleRays17.917.34617.43619.68917.04419.18517.436-0.464
Danny JansenBlue Jays20.616.73617.3418.61316.29618.15317.34-3.26
Daniel RobertsonRays24.919.77221.16921.40819.19320.62120.621-4.279
Gordon BeckhamTigers28.324.48924.63826.15723.225.17724.638-3.662
Greg AllenIndians20.721.43521.08122.9220.64422.02921.4350.735
Tyler White- - -2820.922.30722.56420.16822.14522.145-5.855
Kevin PlaweckiIndians17.816.85317.29818.51716.05918.11117.298-0.502
Sam TravisRed Sox22.917.65218.49519.84316.98719.28818.495-4.405
Travis DemeritteTigers33.930.10631.35831.46928.62829.77530.106-3.794
Jose PerazaReds14.411.43712.41313.95111.79913.7412.413-1.987
Isiah Kiner-FalefaRangers22.118.418.29620.21418.01119.53918.4-3.7
Dawel LugoTigers20.516.42218.9319.87816.0619.16718.93-1.57
Austin BarnesDodgers23.121.1823.07322.72220.50921.98921.989-1.111
Brandon DruryBlue Jays25.324.1124.10425.71723.14524.51924.11-1.19
Albert Almora Jr.Cubs17.119.62918.5721.57718.97720.70419.6292.529
Hernan PerezBrewers26.822.04823.2424.25920.84323.34423.24-3.56
Leonys MartinIndians29.527.90428.02428.9826.89227.65827.904-1.596
Orlando ArciaBrewers2021.01321.94422.74920.11321.99421.9441.944
Mark ReynoldsRockies35.233.21835.25334.56332.68132.75933.218-1.982
Justin BourAngels30.626.07726.70827.39825.20426.5126.51-4.09
Marco HernandezRed Sox27.129.11528.61730.49927.9529.08829.0881.988
Steven DuggarGiants27.823.48524.85324.88822.50923.71123.711-4.089
Elias DiazPirates16.919.19719.84820.74518.7120.14119.8482.948
Cole TuckerPirates25.221.85822.19423.15120.89322.4822.194-3.006
Kendrys Morales- - -12.914.97915.4116.81315.09316.97215.412.51
Chris DavisOrioles39.534.48137.12735.79534.06333.91134.481-5.019
Erik GonzalezPirates23.724.17323.90325.24823.30223.85323.9030.203
Pablo ReyesPirates22.919.05819.20120.6818.21920.2919.201-3.699
Nicky LopezRoyals12.712.45412.5714.67612.24214.47512.57-0.13
John HicksTigers32.729.56329.63631.24528.34429.48229.563-3.137
Juan LagaresMets26.320.77519.19622.37120.13721.36320.775-5.525
Jung Ho KangPirates32.430.59732.04631.92729.59930.27830.597-1.803
Charlie TilsonWhite Sox24.221.64320.68923.23920.83521.94921.643-2.557
Carlos Gonzalez- - -31.329.32429.29730.66428.26829.41729.324-1.976
Richie Martin Jr.Orioles26.923.73624.53425.40722.51724.05124.051-2.849
Billy Hamilton- - -24.621.16522.42722.69820.19621.76421.764-2.836
Isan DiazMarlins29.425.26325.63426.5124.55525.75325.634-3.766
Travis ShawBrewers3327.09327.17328.26325.81227.30227.173-5.827
Bubba StarlingRoyals28.426.40427.43827.43725.80525.85626.404-1.996
Martin PradoMarlins15.813.31913.73515.55813.56815.31913.735-2.065
Austin HedgesPadres31.428.83629.5229.99127.8528.55628.836-2.564
Grayson GreinerTigers31.328.01328.5629.20227.01227.71428.013-3.287
Jose Rondon- - -24.222.34422.83223.98521.27223.30222.832-1.368
Sandy LeonRed Sox24.617.72618.48419.75917.23819.42418.484-6.116
Daniel DescalsoCubs29.426.65827.48827.97126.08726.9326.93-2.47
Mike ZuninoRays33.932.62434.3533.66831.80831.83132.624-1.276
Eduardo NunezRed Sox15.513.69414.55816.22913.57916.14514.558-0.942
Keon Broxton- - -45.639.53743.53541.71739.09139.06839.537-6.063
Lewis BrinsonMarlins29.826.51125.78427.77825.46326.60226.511-3.289
Chris Owings- - -39.831.78434.11733.11430.94531.02131.784-8.016
Jeff MathisRangers35.730.63931.89632.17829.37330.16730.639-5.061

2019 Results BB%

NameTeamBB%# 42# 20# 109# 39# 125MedianMedian - Actual
Christian YelichBrewers13.815.4711.81411.19311.04111.79411.794-2.006
Mike TroutAngels18.318.05814.47613.04613.42114.27914.279-4.021
Yordan AlvarezAstros14.112.27510.44110.39910.20510.8210.441-3.659
Alex BregmanAstros17.219.44814.74213.05113.41714.11714.117-3.083
Nelson CruzTwins10.713.49411.61411.1111.00811.81511.6140.914
David FreeseDodgers12.410.3038.5828.0528.6229.318.622-3.778
Cody BellingerDodgers14.413.27811.90311.10111.34612.32211.903-2.497
Anthony RendonNationals12.412.00111.22910.34110.53411.38611.229-1.171
Ketel MarteDiamondbacks8.410.0458.3948.4198.5639.2718.5630.163
Mitch GarverTwins11.415.95413.51812.4712.56313.27913.2791.879
Joey GalloRangers17.517.61714.27413.33213.50714.5714.274-3.226
George SpringerAstros12.113.75211.95610.99411.22412.13711.956-0.144
Howie KendrickNationals7.37.8246.5546.2415.8126.3136.313-0.987
Fernando Tatis Jr.Padres8.111.47310.0089.9059.50210.14210.0081.908
Juan SotoNationals16.417.33613.94112.6212.98313.93213.932-2.468
Nolan ArenadoRockies9.48.2166.96.7346.5827.0756.9-2.5
Anthony RizzoCubs11.611.3958.9339.4419.3579.8689.441-2.159
Xander BogaertsRed Sox10.911.44299.1248.9849.4869.124-1.776
Keston HiuraBrewers7.28.1527.0246.9427.1047.6297.104-0.096
Charlie BlackmonRockies6.37.5516.7666.436.1676.8096.7660.466
Freddie FreemanBraves12.614.449.8149.8959.84510.8929.895-2.705
J.D. MartinezRed Sox119.5418.3858.2238.3269.0188.385-2.615
Mark CanhaAthletics13.513.65711.48310.68210.76911.52211.483-2.017
Jeff McNeilMets6.26.0485.3865.4113.4924.1725.386-0.814
Bo BichetteBlue Jays6.68.4896.456.2136.1896.6836.45-0.15
Peter AlonsoMets10.411.5719.8239.919.64610.099.91-0.49
Jordan LuplowIndians12.615.07112.79911.7412.0113.10412.7990.199
Aaron JudgeYankees14.315.17713.17512.19212.28913.16213.162-1.138
Eugenio SuarezReds10.611.38610.1289.8949.73410.43710.128-0.472
Carlos CorreaAstros10.910.2328.3788.2538.6369.2668.636-2.264
Mookie BettsRed Sox13.715.04812.33611.31211.40912.14612.146-1.554
Trevor StoryRockies8.810.4458.6398.5928.7219.4438.721-0.079
Carlos SantanaIndians15.716.41913.97112.59612.9913.93113.931-1.769
Austin MeadowsRays9.110.7229.3929.2419.1599.7889.3920.292
Kris BryantCubs11.712.28610.3159.9939.98910.83410.315-1.385
Yoan MoncadaWhite Sox7.28.7637.1197.017.1037.637.119-0.081
Miguel SanoTwins12.514.25312.48511.79411.68312.51612.485-0.015
Josh BellPirates12.116.16611.58311.02511.12612.15611.583-0.517
Jorge SolerRoyals10.813.35412.04911.24611.16411.9511.951.15
Josh DonaldsonBraves15.216.39413.53312.25912.6913.73513.533-1.667
Hunter PenceRangers8.210.3178.027.5798.48.8758.40.2
Rafael DeversRed Sox6.87.4746.166.0225.5186.0446.044-0.756
DJ LeMahieuYankees78.7447.5827.5617.6398.2847.6390.639
Jose AltuveAstros7.59.8387.9547.5998.128.6388.120.62
J.D. DavisMets8.411.8929.0428.2628.8329.6819.0420.642
Trey ManciniOrioles9.39.4037.737.5917.9848.5737.984-1.316
Marcus SemienAthletics11.612.5911.74310.68210.88711.68311.6830.083
Max MuncyDodgers15.315.0713.30912.24312.51113.45713.309-1.991
Mike FordYankees10.413.26411.91311.06911.1211.83611.8361.436
Matt JoyceBraves1614.90312.74711.76812.04613.00112.747-3.253
Bryan ReynoldsPirates8.410.9339.4729.3549.2259.9549.4721.072
Justin TurnerDodgers9.39.4218.3468.2198.3919.1768.391-0.909
Giovanny UrshelaYankees5.36.7075.45.3933.8554.335.3930.093
Ronald Acuna Jr.Braves10.613.47511.32910.53510.68811.57511.3290.729
Will SmithDodgers9.211.24710.0969.8199.73310.46410.0960.896
Dominic SmithMets9.610.3848.328.3518.7089.3368.708-0.892
Willson ContrerasCubs9.310.0238.1198.0268.4868.9158.486-0.814
Matt OlsonAthletics9.312.44410.2769.90910.08110.94810.2760.976
Ian HappCubs9.68.1666.8946.7046.5727.1786.894-2.706
Brad Miller- - -8.813.80311.62110.97511.05311.95711.6212.821
Michael BrantleyAstros86.6287.3326.9056.7967.3966.905-1.095
Corey Dickerson- - -5.76.655.5525.5464.4354.6795.546-0.154
Bryce HarperPhillies14.514.34311.79511.08411.0411.85411.795-2.705
Yuli GurrielAstros67.2286.3746.1125.556.096.1120.112
David DahlRockies6.88.176.9296.7426.9477.4156.9470.147
Mike TauchmanYankees11.513.44711.97510.90111.15812.06811.9750.475
Tim AndersonWhite Sox2.93.7524.965.0752.2392.6473.7520.852
Cameron MaybinYankees11.212.77811.25410.71510.61211.31311.2540.054
Edwin Encarnacion- - -11.913.44611.27210.73610.82111.61111.272-0.628
Joc PedersonDodgers9.711.4489.2749.1479.30510.059.305-0.395
Yasmani GrandalBrewers17.215.32213.01612.02712.15812.88712.887-4.313
Luis ArraezTwins9.810.6159.0269.0528.9829.6199.052-0.748
Aristides AquinoReds7.111.5227.8547.6438.1778.6068.1771.077
Hunter DozierRoyals9.49.9438.6318.7488.3778.9198.748-0.652
Luke VoitYankees13.914.66512.31511.52411.52212.50212.315-1.585
Gleyber TorresYankees7.98.6697.2837.2187.2767.9027.283-0.617
Wilmer FloresDiamondbacks5.38.2997.0666.5326.5137.0977.0661.766
Andrew McCutchenPhillies16.415.48813.42312.30212.57413.54113.423-2.977
Michael ConfortoMets1313.12411.26310.53710.67911.55711.263-1.737
Lourdes Gurriel Jr.Blue Jays5.88.2916.9096.7517.0827.3397.0821.282
Nicholas Castellanos- - -6.26.5096.1166.085.0025.3956.08-0.12
Kyle SchwarberCubs11.513.66811.75811.09511.17412.04811.7580.258
Tommy EdmanCardinals4.68.1077.066.676.6437.2577.062.46
Ramon LaureanoAthletics5.67.6056.3286.1895.6326.1856.1890.589
Trea TurnerNationals7.69.4017.8647.8557.8698.4177.8690.269
Max KeplerTwins10.19.6687.7087.7937.6418.3697.793-2.307
Tom MurphyMariners6.810.3058.7618.868.7489.3278.862.06
Matt ChapmanAthletics10.913.20111.44310.69810.8111.66711.4430.543
Brandon LoweRays7.68.846.7036.6056.4836.9576.703-0.897
Ryan BraunBrewers6.77.7096.6766.6056.1236.5946.605-0.095
Ozzie AlbiesBraves7.77.9966.4566.2695.7976.4436.443-1.257
Eric ThamesBrewers11.112.11310.58210.25810.04510.75510.582-0.518
Shin-Soo ChooRangers11.813.0511.49110.87710.93811.80811.491-0.309
Starling MartePirates4.37.6796.7076.4896.2016.8076.7072.407
Mike YastrzemskiGiants7.89.9958.197.8218.2618.9998.2610.461
Jorge PolancoTwins8.510.0418.9838.8418.9399.6238.9830.483
Shohei OhtaniAngels7.811.7789.1498.9749.24910.0159.2491.449
Danny SantanaRangers4.95.4635.4865.5283.9154.2755.4630.563
Tommy La StellaAngels6.27.6267.3786.8456.8617.5457.3781.178
Jesse WinkerReds9.910.5699.9089.5279.6110.4539.9080.008
Willie CalhounRangers6.87.877.2647.0046.9537.6757.2640.464
Francisco LindorIndians77.6416.9546.6816.3867.0796.954-0.046
Tommy PhamRays12.414.1412.98411.8212.07612.90412.9040.504
Mike MoustakasBrewers9.110.2258.2718.528.6459.4268.645-0.455
Ji-Man ChoiRays13.112.90211.53910.74310.83511.65111.539-1.561
Mitch MorelandRed Sox10.111.6749.4549.2949.39410.2659.454-0.646
Javier BaezCubs59.1316.0266.0315.3075.3156.0261.026
Rhys HoskinsPhillies16.514.58412.83911.86812.07512.91812.839-3.661
Gary SanchezYankees911.1469.3589.6919.2139.399.390.39
Paul GoldschmidtCardinals11.410.7968.7768.0728.859.4898.85-2.55
Donovan SolanoGiants4.45.8675.7185.6294.3884.7855.6291.229
Christian WalkerDiamondbacks11.112.78410.50110.09710.10511.03210.501-0.599
Aledmys DiazAstros10.59.168.3978.5658.449.1478.565-1.935
Omar NarvaezMariners9.811.2848.848.3998.8499.6758.849-0.951
Brett GardnerYankees9.512.63410.36210.1659.91510.56610.3620.862
Jose AbreuWhite Sox5.26.9086.4886.3855.7946.2516.3851.185
Jake CaveTwins9.211.6559.8019.8399.43710.1239.8390.639
Eloy JimenezWhite Sox69.5777.4167.2867.768.0837.761.76
Cavan BiggioBlue Jays16.516.94415.16713.77414.36315.30215.167-1.333
Brian AndersonMarlins8.58.4056.9416.836.7227.1516.941-1.559
Eric Sogard- - -8.610.5859.7019.4649.3669.8399.7011.101
Adam EatonNationals9.99.8788.6028.5348.6399.2948.639-1.261
Alex VerdugoDodgers6.98.1627.2116.9696.8067.3747.2110.311
Yandy DiazRays10.112.96811.32310.4810.67611.57211.3231.223
Eduardo EscobarDiamondbacks7.27.1476.3416.1665.7786.0926.166-1.034
Alex Dickerson- - -6.87.6326.9456.7316.4687.0976.9450.145
Corey SeagerDodgers8.110.5158.1348.4488.229.0728.4480.348
Byron BuxtonTwins6.47.1366.2426.1475.4385.9766.147-0.253
Whit MerrifieldRoyals6.17.6446.9546.5746.5477.1956.9540.854
J.T. RealmutoPhillies6.98.0227.1537.0056.9647.6067.1530.253
Brandon NimmoMets18.114.14812.53911.62911.8712.79912.539-5.561
Kevin NewmanPirates5.36.6946.0215.8814.7615.2765.8810.581
Carson KellyDiamondbacks13.212.02910.94710.44510.42511.20810.947-2.253
Franmil Reyes- - -8.610.3588.6218.1378.5219.1278.6210.021
Victor CaratiniCubs10.410.5069.1919.0679.0349.7589.191-1.209
David PeraltaDiamondbacks8.37.7226.4336.2315.846.2536.253-2.047
Marcell OzunaCardinals11.312.86210.99210.55210.36310.99610.992-0.308
Kurt SuzukiNationals6.57.5186.4086.1655.5576.2246.224-0.276
Austin NolaMariners8.610.3719.0698.898.969.6879.0690.469
Garrett CooperMarlins7.88.2376.8046.4856.5556.8466.804-0.996
Robinson ChirinosAstros11.710.2359.0998.9448.8399.3189.099-2.601
Pablo SandovalGiants6.18.1576.4626.2526.2036.6386.4620.362
David BoteCubs12.411.3779.6929.7269.49210.1159.726-2.674
Jonathan VillarOrioles8.511.3098.9728.3438.8669.6178.9720.472
Manny MachadoPadres9.810.3918.8528.6058.7569.3488.852-0.948
Jose RamirezIndians9.610.9649.8959.5949.6210.3239.8950.295
Avisail GarciaRays5.88.1596.5796.4976.1346.5976.5790.779
Phillip ErvinReds6.910.8689.0098.8598.9889.7839.0092.109
Derek DietrichReds9.211.0178.868.7068.9299.6878.929-0.271
Kolten WongCardinals8.68.5677.5317.7517.6368.3177.751-0.849
Shed LongMariners9.510.5439.0818.4488.9119.6419.081-0.419
Clint FrazierYankees6.513.50211.3710.90410.82811.6611.374.87
Brock HoltRed Sox9.59.9088.398.1748.358.9618.39-1.11
Daniel VogelbachMariners16.518.27714.62113.40413.68514.51714.517-1.983
A.J. PollockDodgers6.78.5497.4067.5667.4458.0417.5660.866
James McCannWhite Sox6.37.3826.6976.4996.2866.8326.6970.397
Brian GoodwinAngels8.310.5318.8288.5458.8999.6388.8990.599
Nick MarkakisBraves1010.7779.4559.2749.3479.989.455-0.545
Joey VottoReds12.513.4212.29411.10911.3912.28712.287-0.213
Kyle SeagerMariners9.911.2319.7379.4859.51210.2949.737-0.163
Christian VazquezRed Sox6.36.9566.2646.0675.4586.0126.067-0.233
Stephen VogtGiants7.18.9777.3787.4617.6398.1297.6390.539
Asdrubal Cabrera- - -11.19.9068.5598.3638.6589.428.658-2.442
Chris TaylorDodgers8.910.1317.8517.7787.9558.6277.955-0.945
Yasiel Puig- - -7.28.7327.1917.0467.0237.6817.191-0.009
Tyler NaquinIndians4.87.145.7465.7044.7075.1455.7040.904
Kole CalhounAngels11.111.8910.0019.8639.69310.49110.001-1.099
Ryan McMahonRockies10.411.4649.3738.8499.1299.9179.373-1.027
Andrew BenintendiRed Sox9.611.3788.5428.1088.6639.4728.663-0.937
Brian DozierNationals12.714.37512.84311.84312.02112.86912.8430.143
Vladimir Guerrero Jr.Blue Jays8.911.2529.7129.3159.38910.0139.7120.812
Scott KingeryPhillies6.88.937.2777.1417.3687.9357.3680.568
Eddie RosarioTwins3.76.7275.6245.6134.2954.725.6131.913
Nathaniel LoweRays7.712.15510.0059.9659.64410.31410.0052.305
Todd FrazierMets812.03210.51710.31310.13510.83510.5172.517
Jason CastroTwins1213.53411.99311.26811.37612.41211.993-0.007
Daniel MurphyRockies6.78.1947.1246.7846.627.1997.1240.424
Ian DesmondRockies7.110.2098.5988.448.5999.2538.5991.499
Jason HeywardCubs11.511.1549.5069.5789.49110.2089.578-1.922
Mike FreemanIndians10.38.5317.4266.9987.3468.0297.426-2.874
Wilson RamosMets8.46.495.9785.8964.785.3665.896-2.504
Nomar MazaraRangers67.6126.8086.6256.6967.116.8080.808
Jon BertiMarlins8.411.54710.2849.8989.82210.53710.2841.884
Domingo SantanaMariners9.911.5189.6219.1699.3710.1689.621-0.279
Ehire AdrianzaTwins8.58.3527.3617.2477.1397.9117.361-1.139
Dexter FowlerCardinals12.914.77412.7611.66211.91912.79512.76-0.14
Roberto PerezIndians1014.57312.95812.00412.16113.02712.9582.958
Mitch HanigerMariners10.611.0229.6359.529.47410.2729.635-0.965
Aaron HicksYankees12.215.90514.00912.84713.16314.13514.0091.809
C.J. CronTwins5.87.3126.7746.5286.3516.9376.7740.974
Teoscar HernandezBlue Jays9.712.08210.54310.02510.03410.73810.5430.843
Victor ReyesTigers4.86.3225.9395.8114.8155.3585.8111.011
Jonathan SchoopTwins4.37.2985.725.7844.3634.6965.721.42
Matt BeatyDodgers6.38.7787.4457.6927.5078.0237.6921.392
Justin SmoakBlue Jays15.815.96613.39112.34812.53913.40613.391-2.409
Alex AvilaDiamondbacks17.917.98715.63814.33314.96516.22515.638-2.262
Michael ChavisRed Sox8.19.5977.8237.6918.0488.5988.048-0.052
Renato NunezOrioles7.37.6336.7776.6856.5596.9536.777-0.523
Jose MartinezCardinals9.410.3458.6898.6198.8269.4868.826-0.574
Evan LongoriaGiants8.59.557.8097.6268.0888.6838.088-0.412
Paul DeJongCardinals9.38.5867.3357.1117.1357.8217.335-1.965
Anthony SantanderOrioles4.77.0216.46.1785.726.1146.1781.478
Oscar MercadoIndians5.89.3277.517.5917.3828.1047.5911.791
Austin SlaterGiants11.513.64712.10411.42411.49112.43212.1040.604
Adam FrazierPirates6.68.2657.537.5227.5248.3117.530.93
Hunter RenfroePadres9.310.4858.9958.7228.8899.4418.995-0.305
Jose OsunaPirates6.39.6547.2426.9157.1417.7587.2420.942
Neil WalkerMarlins1111.4179.8549.7389.58710.2219.854-1.146
Brandon BeltGiants13.513.99511.48110.64310.8711.84111.481-2.019
Alex GordonRoyals8.19.5378.1398.1658.2318.9888.2310.131
Chance SiscoOrioles11.114.89312.89911.79712.10213.08912.8991.799
Greg GarciaPadres14.214.82312.9411.77911.79812.38812.388-1.812
Miguel CabreraTigers8.78.1526.86.5916.4296.8356.8-1.9
Hanser AlbertoOrioles2.93.2884.3254.4220.9641.4143.2880.388
Amed RosarioMets4.77.2516.4026.2235.6356.0746.2231.523
Ender InciarteBraves11.37.4917.1756.8196.7077.5317.175-4.125
Jay Bruce- - -5.77.6436.2556.1945.4895.9556.1940.494
David FletcherAngels8.46.8138.3167.9168.0758.6088.075-0.325
Dansby SwansonBraves9.412.16810.1719.9679.91410.76510.1710.771
Francisco MejiaPadres5.35.625.1535.1813.4993.4795.153-0.147
Victor RoblesNationals5.78.5927.3327.0887.1367.7857.3321.632
Wil MyersPadres10.411.18710.1719.7529.79110.48910.171-0.229
Josh VanMeterReds11.212.32310.59310.20710.10810.82810.593-0.607
Pedro SeverinoOrioles8.514.59111.78311.02811.05611.87711.7833.283
Trent GrishamBrewers10.913.07611.52810.88110.8511.65811.5280.628
Curt CasaliReds10.613.99212.05911.18311.34612.26112.0591.459
Niko GoodrumTigers9.710.4768.8228.6878.7979.4498.822-0.878
Cesar HernandezPhillies6.78.6247.4367.117.2257.8637.4360.736
Colin MoranPirates67.4866.3246.1855.6286.0816.1850.185
Jean SeguraPhillies4.96.5516.2115.9985.145.485.9981.098
Austin RomineYankees4.25.7685.2545.2843.2333.7835.2541.054
Nick SenzelReds7.210.0378.3627.9728.4419.1858.4411.241
Tim BeckhamMariners6.48.87.4127.3467.5048.1157.5041.104
Matt CarpenterCardinals12.813.60912.41911.55111.70712.62112.419-0.381
Nick AhmedDiamondbacks8.38.8637.3717.1647.177.857.371-0.929
Jordy MercerTigers4.89.6878.0687.958.138.6988.133.33
Travis d'Arnaud- - -8.27.7136.5976.3366.276.8356.597-1.603
Tim LocastroDiamondbacks5.67.2196.3696.1055.7016.0586.1050.505
Jackie Bradley Jr.Red Sox9.910.7338.9778.4238.9079.6528.977-0.923
Ryan ZimmermanNationals8.911.6239.5229.6779.3239.8479.6770.777
Marwin GonzalezTwins6.77.5336.636.3656.1256.6396.63-0.07
Willy AdamesRays7.99.7997.9827.7838.048.7498.040.14
Jorge AlfaroMarlins4.710.3545.3515.4843.6913.4875.3510.651
Adeiny Hechavarria- - -6.36.1865.4355.4573.7424.2465.435-0.865
JaCoby JonesTigers8.18.7527.1696.9557.047.4747.169-0.931
Brian McCannBraves9.811.83810.56110.32910.46111.19710.5610.761
Tyler FlowersBraves109.3488.0257.7068.1578.7628.157-1.843
Eric HosmerPadres69.4537.6597.9227.9478.4937.9471.947
Adam HaseleyPhillies5.88.8457.1697.1047.067.5687.1691.369
Albert PujolsAngels7.98.8777.4377.3317.4567.9427.456-0.444
Harold RamirezMarlins47.3076.0766.025.1815.4316.022.02
Adam JonesDiamondbacks5.95.9165.7915.7984.3794.7275.791-0.109
Ben GamelBrewers11.211.31910.28810.0619.79910.42710.288-0.912
Rowdy TellezBlue Jays7.17.8016.8596.8477.0497.1827.049-0.051
Robinson CanoMets5.97.0496.2356.0875.2985.8356.0870.187
Tyler O'NeillCardinals6.69.0677.1037.2277.5047.8547.5040.904
Manny PinaBrewers8.911.2849.1859.0929.28710.0629.2870.387
Josh ReddickAstros6.57.7866.9376.5476.1986.9556.9370.437
Ryon HealyMariners77.9696.996.8096.4797.1016.99-0.01
Freddy Galvis- - -4.86.2075.9365.8784.9885.4195.8781.078
Jesus Aguilar- - -11.711.70310.019.7519.76110.41210.01-1.69
Justin UptonAngels12.511.74510.38810.1329.9810.73610.388-2.112
Austin RileyBraves5.49.4926.8886.9527.0677.3937.0671.667
Raimel TapiaRockies4.76.1455.2895.3293.6344.0345.2890.589
Randal GrichukBlue Jays5.67.7046.7536.6776.3366.8016.7531.153
Starlin CastroMarlins4.17.536.8476.556.2366.8236.8232.723
Matt AdamsNationals69.1527.3027.3287.5227.9247.5221.522
Stephen PiscottyAthletics7.47.7826.7676.5576.4456.9886.767-0.633
Josh NaylorPadres910.3448.2528.1178.4038.6968.403-0.597
Jose IglesiasReds3.84.1154.6964.7152.0652.3254.1150.315
Ronald GuzmanRangers10.88.5397.2427.2247.3627.8857.362-3.438
Kevan SmithAngels7.68.9857.166.7636.8747.3577.16-0.44
Gregory PolancoPirates7.211.6539.4079.4749.2749.9959.4742.274
Miguel RojasMarlins6.18.2126.646.2736.0226.5646.5640.464
Brandon DixonTigers57.6796.4136.36.0666.4836.4131.413
Chris IannettaRockies1114.87512.57611.7412.06413.02312.5761.576
Matt ThaissAngels10.416.70613.11811.70612.11613.22413.1182.718
Ben ZobristCubs13.118.57914.48712.9713.23713.63313.6330.533
Yadier MolinaCardinals5.16.8585.3685.3533.7914.2575.3530.253
Lorenzo CainBrewers89.218.2078.198.2118.8828.2110.211
Rougned OdorRangers99.2977.6267.8367.9118.5177.911-1.089
Enrique HernandezDodgers7.89.9618.4498.3298.429.0158.4490.649
Jurickson ProfarAthletics9.310.8799.4589.4029.36510.0889.4580.158
Jason KipnisIndians7.88.2617.5097.6677.5188.2097.667-0.133
Melky CabreraPirates4.36.8646.0815.9414.8635.4395.9411.641
Tucker BarnhartReds12.19.9378.2538.1788.3298.9978.329-3.771
Ildemaro VargasDiamondbacks4.38.0577.4067.1317.1787.7847.4063.106
Elvis AndrusRangers5.27.4346.5116.2295.7876.1846.2291.029
Dwight Smith Jr.Orioles6.69.7028.3168.188.3238.9428.3231.723
Matt DuffyRays11.213.31311.81810.92910.93811.57911.5790.379
Robbie GrossmanAthletics12.214.73612.98411.63711.91112.69912.6990.499
Dylan MooreMariners8.912.30710.3759.9639.99110.79510.3751.475
Tyler Austin- - -13.414.75812.83512.05411.87512.58412.584-0.816
Luis RengifoAngels9.910.6568.6738.398.8219.6228.821-1.079
Logan ForsytheRangers1217.5614.36212.79813.15713.9813.981.98
Yan GomesNationals10.68.0996.8676.5546.7127.1576.867-3.733
Adalberto MondesiRoyals4.37.7725.8365.9144.7674.9715.8361.536
Chad PinderAthletics5.49.137.4187.1587.2587.9947.4182.018
Ryan GoinsWhite Sox10.413.57112.06711.46211.55612.412.0671.667
Buster PoseyGiants7.68.8537.557.6497.6318.2957.6490.049
Kevin Pillar- - -2.84.0524.6944.7871.7752.0254.0521.252
Didi GregoriusYankees4.96.665.8995.8744.6615.1025.8740.974
Jacob StallingsPirates7.67.2126.4246.2655.6866.0976.265-1.335
Jake LambDiamondbacks14.212.52511.29210.82310.68111.41911.292-2.908
Addison RussellCubs8.38.8716.7166.5066.5956.9576.716-1.584
Jake MarisnickAstros5.37.0156.5036.3465.8036.3716.3711.071
Ty FrancePadres4.59.337.6017.2927.4628.157.6013.101
Jake BauersIndians10.613.19911.80411.09411.15811.95511.8041.204
J.P. CrawfordMariners10.911.6510.349.79.80610.62910.34-0.56
Manuel MargotPadres8.611.369.9329.5839.58510.3599.9321.332
Adam EngelWhite Sox5.68.0936.5946.4156.3666.8246.5940.994
Russell MartinDodgers1211.91510.55610.25810.24811.00210.556-1.444
Delino DeShieldsRangers9.310.5139.4799.2219.1949.8769.4790.179
Leury GarciaWhite Sox3.45.3355.5785.5733.9624.4955.3351.935
Luis UriasPadres1011.469.6379.2459.42210.1699.637-0.363
Rio RuizOrioles9.710.6329.1668.6738.999.759.166-0.534
Christin StewartTigers8.28.4737.1857.1127.2367.727.236-0.964
Harrison BaderCardinals11.310.3549.0288.8438.9279.5429.028-2.272
Harold CastroTigers2.45.0655.315.3253.4653.7975.0652.665
Matt WietersCardinals6.611.97110.1339.7339.86410.51110.1333.533
Garrett HampsonRockies7.311.93111.05210.56610.48411.24611.0523.752
Billy McKinneyBlue Jays6.98.3317.2326.9756.9787.5667.2320.332
Josh PhegleyAthletics4.47.7676.7796.5296.216.7186.7182.318
Guillermo HerediaRays7.812.15810.1459.5179.70410.50910.1452.345
Joey Rickard- - -9.511.2719.2878.5129.1019.7399.287-0.213
Andrelton SimmonsAngels5.78.0477.0796.7786.4587.1027.0791.379
Tony WoltersRockies8.88.8067.7347.7977.7668.3867.797-1.003
Khris DavisAthletics8.812.6149.8189.8419.50610.3649.8411.041
Kyle FarmerReds5.16.0325.9725.8935.1525.4985.8930.793
Willians AstudilloTwins2.56.3245.2625.2612.9953.8455.2612.761
Martin Maldonado- - -8.68.1097.0556.7876.7057.2157.055-1.545
Gerardo Parra- - -6.38.9337.3847.2587.3777.9667.3841.084
Cheslor CuthbertRoyals5.89.57.5537.2617.4538.0457.5531.753
Welington CastilloWhite Sox6.49.7878.1327.848.2998.938.2991.899
Steve WilkersonOrioles6.19.7947.9317.7918.218.598.212.11
Jonathan Lucroy- - -8.28.9337.9527.5317.8278.3387.952-0.248
Tony Kemp- - -8.28.9537.3286.8697.117.7437.328-0.872
Francisco Cervelli- - -8.19.9138.9078.5168.7559.4198.9070.807
Derek Fisher- - -12.617.3114.49413.32613.67814.67114.4941.894
Kevin KiermaierRays5.46.2635.5845.5894.0654.5795.5840.184
Joe Panik- - -8.812.43911.10210.3210.41411.21711.1022.302
Jeimer CandelarioTigers11.110.2428.7678.4778.689.1418.767-2.333
Ronny RodriguezTigers4.47.2875.3475.4143.9923.8385.3470.947
Dee GordonMariners4.35.9265.2445.1883.1093.835.1880.888
Andrew KnappPhillies11.39.6527.4627.237.4038.1057.462-3.838
Maikel FrancoPhillies8.47.4716.7126.4386.1536.7226.712-1.688
Yolmer SanchezWhite Sox7.98.1957.1646.7976.9817.5657.164-0.736
Brandon CrawfordGiants9.510.2017.9527.7688.058.7798.05-1.45
Yairo MunozCardinals3.94.5594.1434.3630.5940.8354.1430.243
Jarrod DysonDiamondbacks10.411.53510.80710.34310.33911.14910.8070.407
Ryan CordellWhite Sox7.78.8547.3567.1487.5398.097.539-0.161
Josh RojasDiamondbacks11.514.21511.99211.17511.36412.24611.9920.492
Johan CamargoBraves66.1845.9145.8764.7615.1735.876-0.124
Ryan O'HearnRoyals10.511.0979.3099.3949.2789.949.394-1.106
Mallex SmithMariners7.49.2527.7547.2927.7628.5047.7620.362
Yonder Alonso- - -11.611.4569.3989.6189.38110.1889.618-1.982
Ian KinslerPadres6.89.1047.5687.2257.4598.1747.5680.768
Austin DeanMarlins4.87.1476.4716.3345.8876.2026.3341.534
Jon JayWhite Sox4.46.4395.855.7114.3685.0615.7111.311
Curtis GrandersonMarlins11.312.89911.6110.85310.81311.45911.4590.159
Joey WendleRays5.36.7286.3296.1145.4985.7486.1140.814
Danny JansenBlue Jays8.110.3888.5858.0978.4859.1568.5850.485
Daniel RobertsonRays10.19.5798.2617.9348.198.828.261-1.839
Gordon BeckhamTigers5.47.7916.946.5976.8527.4196.941.54
Greg AllenIndians4.38.0157.0236.7966.6897.2987.0232.723
Tyler White- - -12.913.12210.99210.59210.52511.15810.992-1.908
Kevin PlaweckiIndians6.99.7418.6068.2038.4849.2888.6061.706
Sam TravisRed Sox76.5976.1966.045.3565.9196.04-0.96
Travis DemeritteTigers7.58.7437.8247.298.1158.828.1150.615
Jose PerazaReds4.25.9895.7075.6744.0074.6235.6741.474
Isiah Kiner-FalefaRangers6.38.5547.2847.0347.067.5367.2840.984
Dawel LugoTigers2.84.584.4784.5471.7791.8984.4781.678
Austin BarnesDodgers9.511.76310.4199.8879.84410.53310.4190.919
Brandon DruryBlue Jays5.68.2126.6726.4286.3516.6976.6721.072
Albert Almora Jr.Cubs4.46.755.8745.8374.5864.8025.8371.437
Hernan PerezBrewers4.56.2045.755.6644.8165.2715.6641.164
Leonys MartinIndians87.9226.8446.7186.5657.1196.844-1.156
Orlando ArciaBrewers7.98.4167.2717.0447.2497.8187.271-0.629
Mark ReynoldsRockies13.612.36411.19910.75110.60611.39611.199-2.401
Justin BourAngels1010.7169.1269.4289.2589.849.428-0.572
Marco HernandezRed Sox1.98.0125.5015.5884.1224.3055.5013.601
Steven DuggarGiants5.79.3087.6557.3067.6658.2877.6651.965
Elias DiazPirates6.910.0138.5668.4128.5519.2618.5661.666
Cole TuckerPirates6.311.6579.8199.599.64210.4919.8193.519
Kendrys Morales- - -12.913.47111.50910.70410.70611.38711.387-1.513
Chris DavisOrioles11.114.43812.08111.62111.40812.23812.0810.981
Erik GonzalezPirates5.88.9086.2756.2325.5085.966.2320.432
Pablo ReyesPirates8.311.88610.0339.7159.79610.61610.0331.733
Nicky LopezRoyals4.57.276.1825.9375.0355.7915.9371.437
John HicksTigers3.97.1884.2514.4581.2711.3254.2510.351
Juan LagaresMets7.77.2986.3576.1885.5155.9236.188-1.512
Jung Ho KangPirates5.98.1547.1087.0367.3477.8277.3471.447
Charlie TilsonWhite Sox6.46.5935.8325.7814.6055.1115.781-0.619
Carlos Gonzalez- - -10.810.3078.2328.0298.4858.8868.485-2.315
Richie Martin Jr.Orioles4.56.6775.6375.6214.4444.8885.6211.121
Billy Hamilton- - -9.18.4837.2926.9087.0857.7597.292-1.808
Isan DiazMarlins9.515.82213.43612.48612.46913.05913.0593.559
Travis ShawBrewers13.313.88911.75411.08711.21312.13311.754-1.546
Bubba StarlingRoyals4.67.9086.4776.3855.7946.3086.3851.785
Martin PradoMarlins4.67.5436.7346.3345.8726.3376.3371.737
Austin HedgesPadres7.87.3746.6846.6596.5056.9236.684-1.116
Grayson GreinerTigers5.89.628.2467.8918.2788.7018.2782.478
Jose Rondon- - -710.5278.3598.0968.6569.3578.6561.656
Sandy LeonRed Sox6.88.7167.5237.3627.5778.1587.5770.777
Daniel DescalsoCubs11.913.39412.29611.50211.62612.49712.2960.396
Mike ZuninoRays6.98.526.9827.0817.1117.5057.1110.211
Eduardo NunezRed Sox2.36.3156.1135.9484.9695.6385.9483.648
Keon Broxton- - -8.812.36710.96410.07210.28911.08110.9642.164
Lewis BrinsonMarlins5.27.996.856.856.8037.2126.851.65
Chris Owings- - -7.18.6616.7136.5336.6387.0986.713-0.387
Jeff MathisRangers6.17.4185.575.5934.6074.9535.57-0.53

Pin It on Pinterest