Analyzing Employee Exit Surveys. Analyze statistical rigor and latent... | by Kamil Mysiak | Towards Data Science

When analyzing employee sentiment data, which in our case is an employee exit survey, we have to look at four topics.
Statistical rigor of the surveyDemographical composition of survey respondentsOverall sentiment for defined latent constructsSentiment scores by respondents’ characteristics (ie. gender, location, department, etc.)
Statistical rigor of the survey
Demographical composition of survey respondents
Overall sentiment for defined latent constructs
Sentiment scores by respondents’ characteristics (ie. gender, location, department, etc.)
First, keeping to this methodology will enable us to determine how well our survey is measuring what it is meant to measure. Secondly, by understanding who answered the survey from a respondent characteristics perspective (ie. gender, departments, etc) we can provide context to our analysis and results. Thirdly, this methodology will help us determine the general sentiment of the responders. Last but not least, it will help us determine not only what organization initiatives might be useful to increase sentiment but also where these initiatives should be implemented.
The dataset we’ll be using is a fictional employee exit survey which asks the employee a series of questions regarding their organizational demographics (ie. department) and 5-point Likert (ie. Strongly Disagree, Disagree, Neutral, Agree, Strongly Agree) sentiment questions (ie. the organization offered plenty of promotional opportunities). No open-ended questions were utilized.
import pandas as pdimport numpy as npimport scipy.stats as statsimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore')pd.set_option('display.max_columns', None)%matplotlib inlinewith open('exit_data_final.csv') as f:    df = pd.read_csv(f)f.close()df.info()
We have 33 items or questions which were asked of the employees. Before we can begin our analysis we have a bit of data cleaning to perform.
df.drop('Unnamed: 0', axis=1, inplace=True)
Let’s drop this odd “Unnamed” column as it services no purpose.
for var in df.columns:    print(var, df[var].unique())
By examining the unique values for each item we can see a few issues.
Some items have missing values labeled correctly as np.nan but others are simply null.Based on df.info() we need to transform the item types for our Likert items as they are currently formatted as ‘objects’.Finally, we need to transform some of the values in order to improve the readability of our visualizations.
Some items have missing values labeled correctly as np.nan but others are simply null.
Based on df.info() we need to transform the item types for our Likert items as they are currently formatted as ‘objects’.
Finally, we need to transform some of the values in order to improve the readability of our visualizations.
# Replacing nulls with np.nanfor var in df.columns:    df[var].replace(to_replace=' ', value=np.nan, inplace=True)# Converting feature typeslikert_items = df[['promotional_opportunities', 'performance_recognized',       'feedback_offered', 'coaching_offered', 'mgmt_clear_mission',       'mgmt_support_me', 'mgmt_support_team', 'mgmt_clear_comm',       'direct_mgmt_satisfaction', 'job_stimulating', 'initiative_encouraged',       'skill_variety', 'knowledge_variety', 'task_variety', 'fair_salary',       'teamwork', 'team_support', 'team_comm', 'team_culture',       'job_train_satisfaction', 'personal_train_satisfaction', 'org_culture',       'grievances_resolution', 'co-worker_interaction',       'workplace_conditions', 'job_stress', 'work/life_balance']]for col in likert_items:    df[col] = pd.to_numeric(df[col], errors='coerce').astype('float64')# Discretization of tenurebins = [0,4,9,14,19,24]labels = ['0-4yrs', '5-9yrs', '10-14yrs', '15-19yrs', '20+yrs']df['tenure'] = pd.cut(df['tenure'], bins = bins, labels=labels)
In my previous article, we reviewed the process of analyzing the statistical rigor (ie. validity, reliability, factor analysis) of our survey. Feel free to review the but let’s quickly review what latent survey constructs are and how they are derived.
In order to develop survey items or questions which maintain good statistical rigor, we have to begin with scholarly literature. We want to find a theoretical model that describes the phenomena we wish to measure. For example, personality surveys very often will use the Big-5 model (ie. openness, conscientiousness, extraversion, agreeableness, and neuroticism) to develop the survey items. The survey developer will carefully craft 2–10 (depending on the length of the survey) items for each component of the model. The items which are meant to assess the same component are said to be measuring a “latent construct”. In order words, we are not measuring “extraversion” explicitly as that would be an “observed construct” but indirectly through the individual survey items. The survey is pilot tested with multiple samples of respondents until a certain level of rigor is attained. Once again, if you’re interested in the statistical analyses used to determine rigor take a look at my previous article.
# Calculating latent variablesdf['employee_valued'] = np.nanmean(df[['promotional_opportunities',                        'performance_recognized',                        'feedback_offered',                        'coaching_offered']], axis=1)df['mgmt_sati'] = np.nanmean(df[['mgmt_clear_mission',                  'mgmt_support_me', 'mgmt_support_team', 'mgmt_clear_comm', 'direct_mgmt_satisfaction']], axis=1)df['job_satisfaction'] = np.nanmean(df[['job_stimulating','initiative_encouraged','skill_variety','knowledge_variety',                                     'task_variety']], axis=1)df['team_satisfaction'] = np.nanmean(df[['teamwork','team_support',                          'team_comm','team_culture']], axis=1)df['training_satisfaction'] = np.nanmean(df[['job_train_satisfaction','personal_train_satisfaction']], axis=1)df['org_environment'] = np.nanmean(df[['org_culture','grievances_resolution','co-worker_interaction','workplace_conditions']], axis=1)df['work_life_balance'] = np.nanmean(df[['job_stress','work/life_balance']], axis=1)df['overall_sati'] = np.nanmean(df[['promotional_opportunities', 'performance_recognized','feedback_offered', 'coaching_offered', 'mgmt_clear_mission','mgmt_support_me', 'mgmt_support_team', 'mgmt_clear_comm','direct_mgmt_satisfaction', 'job_stimulating', 'initiative_encouraged','skill_variety', 'knowledge_variety', 'task_variety', 'fair_salary','teamwork', 'team_support', 'team_comm', 'team_culture', 'job_train_satisfaction', 'personal_train_satisfaction', 'org_culture', 'grievances_resolution', 'co-worker_interaction', 'workplace_conditions', 'job_stress', 'work/life_balance']], axis=1)
Our exit survey has also been developed to assess certain latent constructs. Each survey item is averaged in accordance with the latent factor is it meant to measure. Finally, we have calculated an “overall_sati” feature which calculates the grand average across all items/latent factors for each respondent.
Below is a list of the survey items and the latent construct they are meant to measure. Keep in mind each label for each item has been shortened significantly in order to help facilitate visualizations. You can imagine the items asking questions such as “On a scale of 1–5, I find my job stimulating”.
mappings = {1:'1) Dissatisfied', 2:'1) Dissatisfied', 3:'2) Neutral', 4:'3) Satisfied', 5:'3) Satisfied'}likert = ['promotional_opportunities', 'performance_recognized',       'feedback_offered', 'coaching_offered', 'mgmt_clear_mission',       'mgmt_support_me', 'mgmt_support_team', 'mgmt_clear_comm',       'direct_mgmt_satisfaction', 'job_stimulating', 'initiative_encouraged',       'skill_variety', 'knowledge_variety', 'task_variety', 'fair_salary',       'teamwork', 'team_support', 'team_comm', 'team_culture',       'job_train_satisfaction', 'personal_train_satisfaction', 'org_culture',       'grievances_resolution', 'co-worker_interaction',       'workplace_conditions', 'job_stress', 'work/life_balance']for col in likert:    df[col+'_short'] = df[col].map(mappings)    df.head()
In order to aid with visualizations, we are going to create new features which will aggregate ratings of 1 and 2 into Dissatisfied, 3 into neutral, and 4 and 5 into Satisfied. This will enable us to create stacked bar plots with 3 unique portions.
Understanding the demographics of survey respondents’ helps to provide contextual information for our analysis. We also have to keep in mind that most employee exit surveys are completed on a volunteer basis. Due to this confounding variable, we need to take any insights gleaned from the data as “evidence” of organizational affairs instead of definitive “proof”. Employees might have been extremely happy or angry with the organization and their attitude will surely be represented in their answers. Finally, the survey consists of roughly 600 respondents and we need to be careful not to consider these as the total number of all termination which occurred in the last 4 years. 600 terminations might only be a small percentage of all terminations which have occurred.
In other words, our analysis hopes to determine the level satisfaction on several organizational factors for those employees who RESPONDED to the survey. We should not generalize our results to the broader organization or all terminated employees.
def uni_plots(feature, text):    tmp_count = df[feature].dropna().value_counts().values    tmp_percent = ((df[feature].dropna().value_counts()/len(df))*100).values    df1 = pd.DataFrame({feature: df[feature].value_counts().index,                        'Number of Employees': tmp_count,                        'Percent of Employees': tmp_percent})        f, ax = plt.subplots(figsize=(20,10))    plt.title(text, fontsize=25, pad=30)    plt.tick_params(axis='both', labelsize=15, pad=10)    plt.xlabel(feature, fontsize=20)    plt.xticks(size=18)    plt.yticks(size=18)        sns.set_color_codes('pastel')    count = sns.barplot(x=feature, y='Number of Employees', color='b', data=df1, label='Number of Employees')    for p in count.patches:        count.annotate(format(p.get_height(), '.1f'),                    (p.get_x() + p.get_width() / 2., p.get_height()),                    ha = 'center', va = 'center',                   xytext = (0, 9),                    textcoords = 'offset points', size = 20)        sns.set_color_codes('muted')    percent = sns.barplot(x=feature, y='Percent of Employees', color='b', data=df1, label='Percent of Employees')    for i in percent.patches:        percent.annotate(format(i.get_height(), '.1f'),                    (i.get_x() + i.get_width() / 2., i.get_height()),                    ha = 'center', va = 'center',                    xytext = (0, 9), size = 20,                   textcoords = 'offset points')        ax.set_ylabel('')    ax.legend(ncol=2, loc="upper right", fontsize=15, frameon=True)    sns.despine(left=False, bottom=False)    ax.set_xticklabels(ax.get_xticklabels(), rotation=45)    plt.show()def bi_cat_plot(feature1, feature2):    ax = pd.crosstab(df[feature1], df[feature2], normalize='index')*100    ax1 = ax.plot(kind='barh', stacked=True, figsize=(25,15), fontsize=25)    for i in ax1.patches:        width, height = i.get_width(), i.get_height()        x, y = i.get_xy()         ax1.text(x+width/2,                 y+height/2,                 '{:.0f} %'.format(width),                 horizontalalignment='center',                 verticalalignment='center',                 size=25)        plt.title('Percentage of Termination Reasons by {}'.format(feature1), fontsize=30, pad=25)    plt.ylabel(' ')    plt.legend(prop={'size':20})
The production, customer service, and sales departments make up over 65% of the survey respondents across 4 years (2017–2020) of data collection. We have a large discrepancy in survey respondents across all four years. 2018 saw 342 terminations whereas 2020 has only seen 37.
A major insight stems from the fact that almost 50% of the respondents were voluntary terminations. Once again it is difficult to generalize our results to the broader organization without conclusive HRIS data but this size of discrepancy in termination reasons points us to the possibility that the company may have a problem with voluntary terminations. We don’t have any employee performance data to determine constructive or regrettable voluntary turnover as this would allow us to specifically focus our analysis on regrettable voluntary turnover.
The largest age group of respondents is 56 and older which makes up almost 20% of the respondents. Slicing age by reason for termination we can see that this age group makes up 87% of retirements which would make sense. If we look at voluntary turnover and age, we can see an even distribution across all age groups.
Variables with a low number of categories such as gender typically don’t provide us with many insights unless we see major skewness to the data. It seems females responded to the survey at almost 2:1 ratio compared to males. Looking at gender by reason for termination we see percentages that mirror the ratio we see for gender overall.
We have a fairly even distribution of respondents based on job type. We do see managerial and executive job types to make up a significantly smaller portion but these positions make up smaller portions of the organization in general. What is more interesting that we see a spike in involuntary terminations (38%) for executives. We typically see lower sentiment for involuntary terminations compared to other reasons of termination, therefore, we can expect executives to score fairly low on overall sentiment.
Overall, we see voluntary terminations make up the majority of respondents who mainly come from the production, customer service and sales departments and fall towards the latter years of their careers (41 and older).
The overall respondent sentiment is calculated by first taking the average of all the individual sentiment items (ie. Likert items) for each respondent. Finally, a grand average is calculated depending on how the data is sliced.
def overall_plot(feature):    ax = round(df.groupby(feature)['overall_sati'].mean(),2).sort_values().plot(kind='barh', stacked=True,                                                              figsize=(25,15), fontsize=25)    for i in ax.patches:        width, height = i.get_width(), i.get_height()        x, y = i.get_xy()         ax.text(x+width/2,                y+height/2,                '{:.2f}'.format(width),                horizontalalignment='center',                verticalalignment='center',                size=25)    plt.title('Overall Employee Sentiment by {}'.format(feature), fontsize=30, pad=25)    plt.ylabel(' ')
Overall, HR has the lowest overall sentiment but it also makes up the smallest percentage of respondents (5.8%). This is problematic because the average can be quickly swayed by just a few respondents who rated the Likert items very low. That said, we cannot ignore this low overall average sentiment. On the other hand, production and sales make up the two largest portion of the respondents and they score 2nd and 3rd lowest. We will have to take a look into these three departments to determine which factors score particularly low.
The fact involuntary terminations scored the lowest on overall sentiment is not surprising. Being terminated (fired/laid off) by the organization typically produces adverse emotions which can affect how you respond to the survey. What is more interesting is that voluntary terminations, which is the number one reason in response rate, scored second-lowest on overall sentiment. Understanding the potential causes of voluntary turnover can pay enormous dividends in keeping your high performing workforce.
We can see that 46–50 age group scored the lowest.
As expected, executives scores particularly low on overall sentiment as 38% of them were terminated involuntarily but we also have to remember that 33% were terminated voluntarily. We definitely have to look into which specific factors executives score particularly low on. Finally, machine_ops scored equally low (3.39) on overall sentiment, also this population has a 52% voluntary termination response rate.
Finally, we don’t see any particular differences in general sentiment between tenure groups.
In summary, HR, production, and sales had the lowest overall sentiment with HR scoring (3.39). Since production and sales maintain the highest number of survey respondents we need to examine which specific factors these departments score the lowest on. Involuntary terminations had the lowest sentiment (3.42) which is of no surprise but voluntary turnover had the second-lowest average sentiment while being having the highest number of survey respondents. Finally, we saw executives and machine ops job types to have the lowest sentiment (3.39). Yet again additional analyses are required to ascertain the nature of this relationship.
emp_value_avg = round(np.mean(df['employee_valued']),2)mgmt_sati_avg = round(np.mean(df['mgmt_sati']),2)job_sati_avg = round(np.mean(df['job_satisfaction']),2)team_sati_avg = round(np.mean(df['team_satisfaction']),2)training_sati_avg = round(np.mean(df['training_satisfaction']),2)org_env_avg = round(np.mean(df['org_environment']),2)work_life_avg = round(np.mean(df['work_life_balance']),2)overall_sati = round(np.mean([emp_value_avg, mgmt_sati_avg, job_sati_avg, team_sati_avg,                            training_sati_avg, org_env_avg, work_life_avg]), 2)temp_dict = {'emp_value_avg': emp_value_avg, 'mgmt_sati_avg': mgmt_sati_avg,                      'job_sati_avg': job_sati_avg, 'team_sati_avg': team_sati_avg,                       'training_sati_avg': training_sati_avg, 'org_env_avg': org_env_avg,                      'work_life_avg': work_life_avg, 'overall_sati': overall_sati}tmp_df = pd.DataFrame.from_dict(temp_dict, orient='index', columns=['average']).sort_values(by='average')plt.figure(figsize=(25,15))plt.title('Overall Latent Factor Averages', fontsize=28)plt.ylabel('Average Employee Rating', fontsize=25)ax = tmp_df['average'].plot(kind='barh', fontsize=25)for i in ax.patches:    width, height = i.get_width(), i.get_height()    x, y = i.get_xy()     ax.text(x+width/2,            y+height/2,            '{:.2f}'.format(width),            horizontalalignment='center',            verticalalignment='center',            size=25)plt.grid(False)plt.show()
If we disregard any respondent demographics and look at our latent sentiment factors we see that fair_salary, emp_value, and org_env have scored the lowest. It is important to focus our analysis on these factors in order to understand why these factors are low but also where in the organization they are the lowest (ie. department, job type, etc.). Our results are confirmed for voluntary termination as well.
likert = ['promotional_opportunities', 'performance_recognized',       'feedback_offered', 'coaching_offered', 'mgmt_clear_mission',       'mgmt_support_me', 'mgmt_support_team', 'mgmt_clear_comm',       'direct_mgmt_satisfaction', 'job_stimulating', 'initiative_encouraged',       'skill_variety', 'knowledge_variety', 'task_variety', 'fair_salary',       'teamwork', 'team_support', 'team_comm', 'team_culture',       'job_train_satisfaction', 'personal_train_satisfaction', 'org_culture',       'grievances_resolution', 'co-worker_interaction',       'workplace_conditions', 'job_stress', 'work/life_balance']likert_avgs = []for col in likert:    likert_avgs.append(round(np.nanmean(df[col]),2))likert_avgs_df = pd.DataFrame(list(zip(likert, likert_avgs)), columns=['likert_item', 'avg_sentiment'])likert_avgs_df.set_index('likert_item', inplace=True)plt.figure()ax = likert_avgs_df.plot(kind='bar', figsize=(25,15), fontsize=20)for i in ax.patches:        width, height = i.get_width(), i.get_height()        x, y = i.get_xy()         ax.text(x+width-0.25,                 y+height+.1,                 '{:.2f}'.format(height),                 horizontalalignment='center',                 verticalalignment='center',                 size=20)plt.title('Average Overall Likert Item Sentiment', fontsize=30, pad=25)plt.legend().remove()plt.xlabel(' ')
By examining the individual Likert items which make up each latent factor we can see that promotional opportunities and performance_recognized contribute the most to the low sentiment of emp_value. Although we would have liked to see more than one Likert item to assess salary satisfaction we can examine fair_salary in greater detail to determine where this sentiment is particularly low. Finally, it seems org_culture and grievances_resolution contribute the most to the low sentiment of org_environment.
When analyzing survey data it is quite easy to end-up down a proverbial rabbit-hole of charts and plots only to lose sight of your goal. In other words, we need to narrow our focus. The ultimate goal of analyzing sentiment surveys is to identify areas of weakness where organizational initiatives can be implemented to improve those identified areas. The area we will mainly focus our efforts on are voluntary terminations. First, they make up almost 50% of the respondents. Secondly, this is the employee population where we can make the most significant impact on using organizational initiatives. Finally, we want to limit the amount of voluntary turnover in order to limit the knowledge drain from the organization and minimize the recruiting and training cost associated with hiring replacement employees.
# plotting average likert sentiment by respondent characteristics for voluntary terminationsdef bi_volterm_plot(feature1, feature2):    tmp_df = df.loc[(df['reason_of_term']=='vol_term')]    ax = round(tmp_df.groupby(feature1)[feature2].mean(),2).sort_values().plot(kind='barh', stacked=True,                                                              figsize=(25,15), fontsize=25)    for i in ax.patches:        width, height = i.get_width(), i.get_height()        x, y = i.get_xy()         ax.text(x+width/2,                 y+height/2,                 '{:.2f}'.format(width),                 horizontalalignment='center',                 verticalalignment='center',                 size=25)    plt.title('Average {} Sentiment of Voluntary Terminations by {}'.format(feature2, feature1),fontsize=30, pad=25)    plt.ylabel(' ')    plt.legend(prop={'size':20})
Not surprisingly voluntary termination from the HR department had the lowest score on emp_value as HR has the lowest overall sentiment. Additionally, purchasing, customer service, and production also scored relatively low. This is important as production and customer service have the largest number of survey respondents.
Since we know promotional opportunities and performance recognized are the main drivers behind low emp_value sentiment we are plotting these Likert items against department, age, and job type.
Filtering the data for only voluntary terminations, we can see that most departments score low on promotional opportunities but customer_service, HR, and purchasing score particularly low. Age scores especially low as voluntarily terminated employees between the ages of 21–50 score very low on promotional opportunities sentiment. Age group 46–50 yrs old scores very low (2.62) on this Likert item. Voluntarily terminated executives, managerial, machine ops, and service workers job types scored low on promotional opportunities sentiment with executives scoring very low (2.17). Finally, all tenure groups besides 1–14 yrs score low on promotional opportunities but 5–9 yrs scored especially low (2.80).
Once again we see purchasing and HR score the lowest on performance recognized but IT and production have fairly low sentiment as well. From an employee age perspective, 26–50 have scored the lowest, plus these age groups also scored very low on promotional opportunities. Again we see executive, managerial, and machine ops job types score the lowest. Finally, much like we saw with promotional opportunities, tenure group 5–9 yrs has scored the lowest on performance recognized.
Fair_salary scored second-lowest on overall respondent sentiment. Now that we have filtered our data for voluntary terminations let’s take a look where salary sentiment is the lowest. Not surprisingly, HR and purchasing departments scored the lowest. However, production which has a tendency to score low as well on many Likert items actually scored relatively well. That said, we do see R&D and IT scoring low on this Likert item. 46–50 yr olds again score low as they record an average sentiment of (2.76). Executives, managerial, and administrative job types score the lowest on fair_salary. Finally, tenure group 5–9 yrs scored the lowest.
We know that the organizational environment factor scored third lowest in terms of overall sentiment. As we filter for voluntary terminations we see that HR and purchasing scored the lowest on this factor. Let’s break this factor into its individual Likert items.
We saw from our analysis above that org_culture and grievances_resolution were the two Likert items that seemed to contribute most to organizational environment’s low overall sentiment.
It would seem org-culture has scored low and at times very low across all departments. From an age perspective, org_culture is the lowest for 46–50 yr olds but it’s generally low for individuals between 26–50 yrs old. Executives have scored extremely low on this Likert item (1.80) followed by machine ops and managerial. That said, all job types besides sales have scored below an average score of 3.00. Finally from a tenure perspective, all tenure groups scored below 3.00 with 5–9yrs group scoring particularly low.
Once again purchasing, HR, customer service and production scored the lowest on grievances_resolution. Age groups, once more we see 46–50-year-old respondents make up the lowest sentiment. Executives and machine ops had the lowest sentiment for grievances resolution. Finally, again 5–9yrs tenure group scored the lowest on this Likert item much like org_culture.
Voluntary terminations made up the largest group of survey respondents at almost 50%. This is wonderful news as it allows us enough data to make insights into the organizational sentiment of a, particularly important population. Understanding the potential reason why voluntary terminations are occurring can help the company reduce this turnover thereby minimizing knowledge drain and hiring cost.
Production (32%), customer service (19%), and sales (16%) made up the majority of survey responses from a departmental perspective. Despite the remaining departments having a significantly lower response rate their number of responses is not low enough which would warrant their insights meaningless.
Respondents 56 yrs of age and older made up the largest group at (23%) and the remaining groups were relatively even besides 20 yrs and younger which only made up (2.3%). By slicing this data by reason of termination we can see that 54% of 56 yrs and older responders were retiring.
Females answered the survey at almost 2:1 rate compared to males.
Job types were fairly evenly represented in the survey with Service workers (19%), professional (17%), and sales (14%) taking the top three. Executives answered the survey at the lowest rates (3%) or 24 responses. 24 is a relatively low number of responses which can produce skewed results. Furthermore, the executive job type had the largest percentage (38%) of involuntary terminations and we know that involuntary terminations have a tendency to produce more negative overall sentiment. Any insights regarding the executive population will have to be scrutinized and validated with much larger sample size.
Finally, organization tenure yield an even representation of responses at average 20% per tenure group.
As expected involuntary terminations had the lowest average sentiment but closely followed by voluntary terminations. It would seem HR, production, and sales departments had the overall lowest sentiment. Furthermore, responders between the ages of 46–50 along with executive, machine ops, and managerial job types had the lowest overall sentiment.
The three latent factors with the lowest overall sentiment were salary satisfaction (3.14), employee valued (3.31), and organizational environment (3.46). If we examine the individual Likert items/questions for these three latent factors we can see that promotional opportunities and performance recognition were had the lowest sentiment for employee valued. Fair salary had the lowest sentiment for salary satisfaction. Finally, organizational culture and grievances resolution had the lowest overall sentiment for organizational environment.
When specifically looking at the voluntarily terminated population we see similar results as above. Salary satisfaction, employee value, and organizational environment had the lowest overall sentiment. Again promotional opportunities and performance recognition were the driving factors for low employee value sentiment. Fair salary was the main driver of low salary satisfaction. Finally, organizational culture and grievances resolution had the lowest scores on the organizational environment latent factor.
Promotional Opportunities (employee value)
Most departments need to improve their access to promotional opportunities but purchasing, HR, customer service, and production departments are in greatest need to stem voluntary turnover. Furthermore, it seems promotional opportunities sentiment is low across most age groups especially 46–50 years olds. Executives, managerial, machine ops and service worker job types suffered most from lack of promotional opportunities. Finally, tenured employees between 5–9 yrs had the lowest sentiment towards promotional opportunities.
Performance Recognition (employee value)
Purchasing and HR had suffered from low-performance recognition. Low sentiment for performance recognition was also shared by 46–50 yrs olds, executives, managerial, and machine ops job types. Finally, we again see 5–9 yrs of tenure seems to have low sentiment on this item.
Fair Salary (salary satisfaction)
HR, purchasing, R&D and IT had the lowest sentiment towards their salary. Older age groups, particularly 46–50 yrs old, had low sentiment. Executives, managerial and administrative respondents scored the lowest on salary satisfaction.
Organizational Culture (org environment)
It seems organizational culture has the lowest overall sentiment across the entire survey. All departments, especially purchasing, customer service, and production seem to suffer from low sentiment. The same is true for age and job type where 46–50 yr olds and executives, machine ops, and managerial seem to score the lowest.
Grievance Resolution (org environment)
The sentiment for this topic is generally higher than organization culture but it is still a major contributing factor to low organizational environment sentiment. Again the same departments, purchasing, HR, customer service, and production score the lowest. The trend continues as 46–50-year-olds score the lowest again. Executives, machine ops, and service workers score the lowest as well.
We focused our attention on analyzing an employee exit survey from roughly 600 employees which was collected over a 4 year prior. The vast majority of survey responders (50%) were voluntary terminations. Departments of production, customer service, and sales made up the majority of respondents. The overall respondents’ age was slightly skewed as the largest group was 56 yrs of age and older. Finally, job types were proportionally represented.
Involuntary terminations had the lowest overall sentiment closely followed by voluntary terminations. Overall, salary satisfaction, employee value and organizational environment had the lowest sentiment. These results were confirmed for the voluntary terminated sample as well.
The analysis was then specifically focused on the voluntarily terminated sample. It seems in order to increase overall employee sentiment and potentially reduce voluntary turnover the organization needs to focus its initiatives on improving promotional opportunities, performance recognition, salary, organizational culture, and grievances resolution.
Any initiatives developed towards improving the aforementioned areas in order to potentially stem voluntary turnover would be best targeted towards the purchasing, HR, customer service, and production departments (in order to need). Furthermore, employees between the ages of 46–50, 26–30, and 36–40 would also benefit from any and all initiatives. From a job type perspective, executives, machine ops, managerial, and service workers would also benefit from these initiatives (in order of need). It is important to note the executive job type had a small sample size (24) and only a third of that were voluntary terminations. The survey, in general, had a relatively small sample size (600), therefore, it is recommended these results be validated by a larger survey sample. That said, these results do provide a small glimpse into the organizational issues which might reside inside.