Last active
December 20, 2015 03:59
-
-
Save lluang/6067230 to your computer and use it in GitHub Desktop.
Volunteer Retention Model
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "Volunteer retention simulation" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Disaster Reponse Volunteer Retention\n", | |
"\n", | |
"- Overview, Design concept, and Details protocol\n", | |
"- Louis Luangkesorn\n", | |
"\n", | |
"## Problem \n", | |
" \n", | |
"- Much of community disaster response is based on the use of community volunteers who provide additional capability when the standing emergency response capacity is overwhelmed.\n", | |
"\n", | |
"- Community volunteer recruitment and retention is often influenced by the frequency and level of activity.\n", | |
"\n", | |
"- Objective: Explore the effect of the number of teams on the ability of response teams to recruit and retain volunteers. \n", | |
"\n", | |
"--\n", | |
"\n", | |
"## Model formulation \n", | |
" \n", | |
"- A given region has a random number of disasters per year that require a random number of response teams (one lead, and random number of support teams)\n", | |
"- Actual responses (lead or support) lead to improved publicity in the community and improved recruitment.\n", | |
"- Too many responses lead to burnout.\n", | |
"- Teams can respond as a lead or support.\n", | |
"- Only teams of a minimum size can be a lead team.\n", | |
"\n", | |
"## Purpose\n", | |
"\n", | |
"- To evaluate the effect of the number and concentration of teams on team recruitment and retention.\n", | |
"\n", | |
"- Project is motivated on the experiences of Community Evacuation Center Teams associated with the Western Pennsylvania Red Cross\n", | |
"\n", | |
"--\n", | |
"\n", | |
"## Entities, State Variables, and Scales\n", | |
"\n", | |
"- Entities\n", | |
"\t- Potential volunteers\n", | |
"\t- Teams\n", | |
"\t- Coordinator\n", | |
"- State variables\n", | |
"\t- Historical responses\n", | |
"- Scale\n", | |
"\t- Annual\n", | |
"\n", | |
"--\n", | |
"\n", | |
"## Process Overview and Scheduling\n", | |
"\n", | |
"- Teams recruit a random number of volunteers. Influenced by historical activity.\n", | |
"- Team members drop out of the team.\n", | |
"- Incidents occur during the year.\n", | |
"\t- Coordinator chooses a lead team and responding teams.\n", | |
"\t- For each incident a lead team is chosen from the teams of a minimum size.\n", | |
"\t- Each incident is of random size which determines how the size of the required volunteer base.\n", | |
"\t- Support teams can be chosen from any other teams until the volunteer base is reached.\n", | |
"\t- Teams can refuse a call. Usually based on number of responders and if team feels it has been too busy.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from random import randint, random\n", | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt\n", | |
"import matplotlib.cm as cm\n", | |
"import scipy" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def teamsrequired(numyears, avgincidentsperyear = 2.5, avgresponse = 20):\n", | |
" ''' Generate the sequence of teams needed per year\n", | |
" \n", | |
" Input:\n", | |
" - Number of years\n", | |
" - Average number of incidents per year\n", | |
" - Average number of people required per incident (must be greater than 1)\n", | |
" Output:\n", | |
" - List of years where each year has the number of teams requried for each incident.\n", | |
" '''\n", | |
" annualdisasters = scipy.random.poisson(float(avgincidentsperyear), numyears)\n", | |
" teamscalled = [scipy.random.poisson(avgresponse-1, annualdisasters[year])+1 for year in range(len(annualdisasters))]\n", | |
" return annualdisasters, teamscalled" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"numberyears = 25\n", | |
"disasters, teams = teamsrequired(numberyears)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 3 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"disasters" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 4, | |
"text": [ | |
"array([3, 4, 3, 5, 3, 0, 2, 3, 1, 4, 3, 1, 1, 3, 5, 2, 2, 0, 4, 1, 5, 2, 1,\n", | |
" 3, 3])" | |
] | |
} | |
], | |
"prompt_number": 4 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"teams" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 5, | |
"text": [ | |
"[array([28, 22, 18]),\n", | |
" array([27, 19, 20, 18]),\n", | |
" array([19, 22, 19]),\n", | |
" array([26, 14, 18, 17, 18]),\n", | |
" array([19, 23, 20]),\n", | |
" array([], dtype=int64),\n", | |
" array([19, 11]),\n", | |
" array([21, 15, 18]),\n", | |
" array([14]),\n", | |
" array([24, 21, 19, 20]),\n", | |
" array([23, 21, 19]),\n", | |
" array([20]),\n", | |
" array([26]),\n", | |
" array([21, 17, 16]),\n", | |
" array([17, 16, 18, 13, 27]),\n", | |
" array([17, 27]),\n", | |
" array([26, 19]),\n", | |
" array([], dtype=int64),\n", | |
" array([16, 26, 25, 18]),\n", | |
" array([25]),\n", | |
" array([27, 20, 22, 15, 29]),\n", | |
" array([26, 14]),\n", | |
" array([21]),\n", | |
" array([22, 16, 27]),\n", | |
" array([22, 19, 23])]" | |
] | |
} | |
], | |
"prompt_number": 5 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Team retention and recruitment\n", | |
"\n", | |
"Each team can draw from a fixed population. Each team starts with a certain number of members.\n", | |
"Each year, members randomly enter and leave the system.\n", | |
"\n", | |
"**To add**: $p_{retain}$ and $p_{recruit}$ should be functions of the size of the team and incidents called" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"numberteams = 20\n", | |
"sourcepopulation = 50\n", | |
"minsizelead = 6\n", | |
"avginitial = 8.5\n", | |
"pretain = 0.8\n", | |
"precruit = 0.05\n", | |
"fractioninitial = float(avginitial)/float(sourcepopulation)\n", | |
"neighborhood = scipy.random.binomial(1, fractioninitial, [1, int(numberteams), int(sourcepopulation)])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 6 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def individualchoice(current, pretain, precruit):\n", | |
" ''' Model the individual person decision to remain on a team or leave\n", | |
" '''\n", | |
" if current == 1:\n", | |
" next = scipy.random.binomial(1, pretain)\n", | |
" else:\n", | |
" next = scipy.random.binomial(1, precruit)\n", | |
" return next\n", | |
"\n", | |
"def updateteams(neighborhood, pretain, precruit):\n", | |
" ''' For each team, model the decisions of people within the team to leave within.\n", | |
" '''\n", | |
" \n", | |
" newneighborhood = scipy.zeros(shape(neighborhood))\n", | |
" for team in range(len(neighborhood)):\n", | |
" nextyear = [individualchoice(neighborhood[team][i], pretain, precruit) for i in range(len(neighborhood[team]))]\n", | |
" newneighborhood[team] = nextyear\n", | |
" #print nextyear\n", | |
" #print sum(newneighborhood), newneighborhood\n", | |
" return [newneighborhood]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 7 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"nextround = updateteams(neighborhood[0], pretain, precruit)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 8 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"for i in range(numberyears):\n", | |
" nextround = updateteams(nextround[0], pretain, precruit)\n", | |
" neighborhood= vstack((neighborhood, nextround))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 9 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Assignment of teams to incidents\n", | |
"\n", | |
"Each incident has a minimum size. Add teams until the sum of members of teams reaches that size" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"timeindex = len(neighborhood)\n", | |
"timeindex\n" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 10, | |
"text": [ | |
"26" | |
] | |
} | |
], | |
"prompt_number": 10 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"currentteamsize = [[int(sum(neighborhood[yearindex][i])) for i in range(len(neighborhood[0]))] for yearindex in range(timeindex)]\n", | |
"currentteamsize" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 11, | |
"text": [ | |
"[[14, 5, 10, 11, 8, 12, 8, 8, 9, 4, 9, 10, 8, 10, 5, 5, 12, 7, 6, 8],\n", | |
" [13, 10, 11, 9, 13, 7, 5, 8, 9, 10, 9, 10, 9, 11, 5, 6, 11, 12, 12, 9],\n", | |
" [13, 11, 9, 10, 17, 8, 7, 12, 8, 7, 10, 8, 10, 14, 7, 4, 10, 13, 10, 7],\n", | |
" [13, 12, 12, 6, 14, 8, 4, 11, 10, 8, 10, 9, 11, 15, 8, 6, 10, 10, 10, 6],\n", | |
" [12, 8, 10, 4, 11, 9, 6, 7, 9, 8, 7, 9, 11, 13, 10, 7, 12, 7, 11, 6],\n", | |
" [13, 8, 11, 5, 12, 9, 9, 7, 6, 6, 7, 11, 8, 10, 12, 9, 14, 8, 11, 9],\n", | |
" [12, 7, 13, 7, 16, 7, 7, 8, 7, 11, 6, 13, 12, 7, 12, 9, 10, 8, 9, 10],\n", | |
" [14, 8, 15, 8, 16, 7, 6, 7, 6, 11, 8, 12, 13, 8, 12, 8, 8, 8, 9, 11],\n", | |
" [14, 9, 18, 9, 15, 8, 7, 6, 7, 11, 7, 9, 12, 10, 11, 8, 7, 7, 10, 11],\n", | |
" [12, 7, 16, 10, 14, 5, 8, 5, 9, 10, 8, 9, 12, 13, 12, 9, 6, 8, 8, 12],\n", | |
" [9, 7, 15, 11, 13, 4, 9, 8, 7, 10, 7, 7, 11, 14, 11, 8, 8, 9, 7, 12],\n", | |
" [8, 7, 11, 8, 14, 4, 5, 3, 4, 11, 8, 8, 9, 15, 9, 8, 7, 13, 6, 10],\n", | |
" [7, 8, 12, 9, 14, 7, 9, 6, 9, 12, 6, 7, 10, 14, 7, 8, 6, 12, 5, 8],\n", | |
" [5, 11, 12, 10, 17, 6, 10, 6, 8, 10, 6, 6, 9, 10, 7, 7, 6, 11, 5, 8],\n", | |
" [7, 11, 12, 12, 13, 5, 10, 9, 7, 9, 7, 5, 9, 11, 8, 9, 6, 6, 5, 6],\n", | |
" [6, 8, 13, 11, 12, 5, 12, 7, 9, 9, 7, 7, 6, 8, 13, 9, 8, 5, 4, 6],\n", | |
" [9, 12, 12, 12, 11, 8, 11, 6, 9, 11, 6, 7, 8, 7, 13, 10, 8, 5, 3, 8],\n", | |
" [7, 9, 14, 11, 12, 9, 12, 6, 9, 9, 6, 11, 5, 9, 11, 9, 9, 4, 6, 6],\n", | |
" [9, 10, 13, 9, 9, 13, 14, 5, 6, 9, 7, 11, 7, 10, 12, 10, 9, 5, 7, 7],\n", | |
" [11, 12, 15, 11, 11, 11, 10, 4, 8, 11, 7, 12, 5, 9, 12, 11, 7, 9, 6, 7],\n", | |
" [11, 12, 12, 9, 6, 15, 11, 6, 8, 13, 5, 9, 6, 9, 9, 13, 7, 12, 8, 6],\n", | |
" [13, 10, 12, 8, 7, 12, 9, 8, 5, 10, 8, 7, 7, 11, 12, 11, 6, 9, 12, 6],\n", | |
" [13, 8, 13, 5, 4, 14, 12, 7, 8, 9, 9, 7, 9, 10, 11, 13, 6, 8, 11, 9],\n", | |
" [12, 6, 12, 8, 3, 14, 12, 10, 8, 6, 10, 6, 8, 9, 10, 16, 5, 7, 7, 10],\n", | |
" [12, 7, 15, 7, 7, 14, 13, 10, 5, 5, 9, 6, 6, 8, 8, 13, 5, 8, 7, 8],\n", | |
" [14, 15, 14, 9, 7, 11, 13, 12, 7, 5, 9, 7, 6, 8, 6, 13, 6, 5, 9, 11]]" | |
] | |
} | |
], | |
"prompt_number": 11 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Data visualization\n", | |
"\n", | |
"Use a grid that shows how many members are in each team over time" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# From the Matplotlib gallery http://matplotlib.org/examples/api/image_zcoord.html\n", | |
"def format_coord(x, y):\n", | |
" col = int(x+0.5)\n", | |
" row = int(y+0.5)\n", | |
" if col>=0 and col<numcols and row>=0 and row<numrows:\n", | |
" z = X[row,col]\n", | |
" return 'x=%1.4f, y=%1.4f, z=%1.4f'%(x, y, z)\n", | |
" else:\n", | |
" return 'x=%1.4f, y=%1.4f'%(x, y)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 12 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"X = currentteamsize\n", | |
"\n", | |
"fig = plt.figure()\n", | |
"ax = fig.add_subplot(111)\n", | |
"ax.imshow(X, cmap=cm.jet, interpolation='nearest')\n", | |
"numrows, numcols = shape(X)\n", | |
"ax.format_coord = format_coord\n", | |
"plt.xlabel('Team')\n", | |
"plt.ylabel('Year')\n", | |
"plt.show()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"png": "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\n/w8Zy6kQ1xfiyQAAAABJRU5ErkJggg==\n" | |
} | |
], | |
"prompt_number": 13 | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment