Asiakaspalvelupisteen jonon muodostukseen vaikuttaa kaksi tekijää:
● Asiakkaiden saapuminen palvelupisteeseen.
● Palvelun kesto.
Asiakkaiden saapumista voidaan monissa tapauksissa mallintaa onnistuneesti eksponentiaalisella jakaumalla. Tällöin tarvitaan tieto siitä, kuinka paljon asiakkaita saapuu keskimäärin tarkasteltavassa aikavälissä.
Palvelun kestoa voidaan monissa tapauksissa mallintaa onnistuneesti normaalijakaumalla. Tällöin tarvitaan palveluajan keskiarvo ja keskihajonta.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
KESKIARVO_ASIAKAS = 5 #asiakkaiden väli minuutteina
KESKIARVO_PALVELU = 2 #minuuttia
KESKIHAJONTA_PALVELU = 0.5
ASIAKKAITA = 1000
simulointi = pd.DataFrame(index = range(ASIAKKAITA))
simulointi['seuraava_asiakas'] = np.random.exponential(KESKIARVO_ASIAKAS, size = ASIAKKAITA)
simulointi['saapumis_aika'] = simulointi['seuraava_asiakas'].cumsum()
simulointi['palvelun_kesto'] = np.random.normal(loc = KESKIARVO_PALVELU, scale = KESKIHAJONTA_PALVELU,
size = ASIAKKAITA)
simulointi['palvelun_aloitus'] = simulointi['saapumis_aika']
simulointi['palvelun_lopetus'] = simulointi['saapumis_aika'] + simulointi['palvelun_kesto']
for i in range(1, len(simulointi)):
if simulointi.loc[i, 'saapumis_aika'] < simulointi.loc[i-1, 'palvelun_lopetus']:
simulointi.loc[i, 'palvelun_aloitus'] = simulointi.loc[i-1,'palvelun_lopetus']
simulointi['palvelun_lopetus'] = simulointi['palvelun_aloitus'] + simulointi['palvelun_kesto']
simulointi['jonotus'] = simulointi['palvelun_aloitus'] - simulointi['saapumis_aika']
simulointi['kokonais_aika'] = simulointi['jonotus'] + simulointi['palvelun_kesto']
simulointi
seuraava_asiakas | saapumis_aika | palvelun_kesto | palvelun_aloitus | palvelun_lopetus | jonotus | kokonais_aika | |
---|---|---|---|---|---|---|---|
0 | 4.559935 | 4.559935 | 1.970475 | 4.559935 | 6.530409 | 0.000000 | 1.970475 |
1 | 7.170075 | 11.730009 | 1.750567 | 11.730009 | 13.480576 | 0.000000 | 1.750567 |
2 | 2.125404 | 13.855414 | 2.863559 | 13.855414 | 16.718973 | 0.000000 | 2.863559 |
3 | 14.641087 | 28.496501 | 2.058293 | 28.496501 | 30.554794 | 0.000000 | 2.058293 |
4 | 3.523031 | 32.019532 | 2.096044 | 32.019532 | 34.115576 | 0.000000 | 2.096044 |
5 | 0.716269 | 32.735801 | 1.767038 | 34.115576 | 35.882613 | 1.379775 | 3.146812 |
6 | 5.303635 | 38.039436 | 1.753736 | 38.039436 | 39.793172 | 0.000000 | 1.753736 |
7 | 3.239577 | 41.279013 | 2.786673 | 41.279013 | 44.065686 | 0.000000 | 2.786673 |
8 | 12.890109 | 54.169123 | 2.685727 | 54.169123 | 56.854850 | 0.000000 | 2.685727 |
9 | 3.937489 | 58.106611 | 2.637670 | 58.106611 | 60.744281 | 0.000000 | 2.637670 |
10 | 6.887558 | 64.994169 | 0.923588 | 64.994169 | 65.917757 | 0.000000 | 0.923588 |
11 | 16.207476 | 81.201645 | 2.562661 | 81.201645 | 83.764306 | 0.000000 | 2.562661 |
12 | 12.078720 | 93.280365 | 2.098805 | 93.280365 | 95.379171 | 0.000000 | 2.098805 |
13 | 8.308787 | 101.589152 | 2.684418 | 101.589152 | 104.273571 | 0.000000 | 2.684418 |
14 | 0.101702 | 101.690854 | 1.657744 | 104.273571 | 105.931314 | 2.582716 | 4.240460 |
15 | 3.926541 | 105.617396 | 1.943939 | 105.931314 | 107.875253 | 0.313919 | 2.257858 |
16 | 9.675890 | 115.293285 | 1.975953 | 115.293285 | 117.269238 | 0.000000 | 1.975953 |
17 | 3.250767 | 118.544052 | 1.941022 | 118.544052 | 120.485074 | 0.000000 | 1.941022 |
18 | 8.665241 | 127.209293 | 1.322388 | 127.209293 | 128.531681 | 0.000000 | 1.322388 |
19 | 5.277812 | 132.487105 | 2.391272 | 132.487105 | 134.878377 | 0.000000 | 2.391272 |
20 | 5.039594 | 137.526699 | 2.022646 | 137.526699 | 139.549345 | 0.000000 | 2.022646 |
21 | 3.944090 | 141.470789 | 1.160414 | 141.470789 | 142.631204 | 0.000000 | 1.160414 |
22 | 4.229980 | 145.700769 | 1.353824 | 145.700769 | 147.054593 | 0.000000 | 1.353824 |
23 | 0.925151 | 146.625920 | 2.340526 | 147.054593 | 149.395120 | 0.428673 | 2.769200 |
24 | 2.306118 | 148.932038 | 1.134182 | 149.395120 | 150.529301 | 0.463082 | 1.597263 |
25 | 0.299353 | 149.231391 | 2.667097 | 150.529301 | 153.196398 | 1.297910 | 3.965007 |
26 | 0.225853 | 149.457244 | 2.107281 | 153.196398 | 155.303679 | 3.739154 | 5.846434 |
27 | 0.847106 | 150.304351 | 2.081570 | 155.303679 | 157.385249 | 4.999328 | 7.080898 |
28 | 10.233806 | 160.538156 | 1.934800 | 160.538156 | 162.472957 | 0.000000 | 1.934800 |
29 | 0.616380 | 161.154536 | 2.640670 | 162.472957 | 165.113627 | 1.318420 | 3.959090 |
... | ... | ... | ... | ... | ... | ... | ... |
970 | 7.102974 | 4964.656230 | 2.428474 | 4964.656230 | 4967.084704 | 0.000000 | 2.428474 |
971 | 0.138565 | 4964.794795 | 2.744121 | 4967.084704 | 4969.828825 | 2.289909 | 5.034030 |
972 | 3.011328 | 4967.806123 | 2.080804 | 4969.828825 | 4971.909629 | 2.022702 | 4.103506 |
973 | 16.542482 | 4984.348605 | 1.713767 | 4984.348605 | 4986.062372 | 0.000000 | 1.713767 |
974 | 3.610126 | 4987.958731 | 1.303616 | 4987.958731 | 4989.262347 | 0.000000 | 1.303616 |
975 | 0.523492 | 4988.482223 | 1.887123 | 4989.262347 | 4991.149470 | 0.780124 | 2.667247 |
976 | 5.928719 | 4994.410942 | 1.555162 | 4994.410942 | 4995.966104 | 0.000000 | 1.555162 |
977 | 17.111571 | 5011.522513 | 1.243976 | 5011.522513 | 5012.766489 | 0.000000 | 1.243976 |
978 | 7.167799 | 5018.690312 | 1.888549 | 5018.690312 | 5020.578861 | 0.000000 | 1.888549 |
979 | 3.154027 | 5021.844339 | 1.980424 | 5021.844339 | 5023.824763 | 0.000000 | 1.980424 |
980 | 10.400865 | 5032.245204 | 2.148101 | 5032.245204 | 5034.393305 | 0.000000 | 2.148101 |
981 | 0.204477 | 5032.449681 | 2.214375 | 5034.393305 | 5036.607680 | 1.943624 | 4.157999 |
982 | 1.020533 | 5033.470214 | 1.290481 | 5036.607680 | 5037.898161 | 3.137466 | 4.427948 |
983 | 1.700163 | 5035.170377 | 2.548396 | 5037.898161 | 5040.446557 | 2.727784 | 5.276180 |
984 | 4.861728 | 5040.032105 | 1.653602 | 5040.446557 | 5042.100159 | 0.414452 | 2.068054 |
985 | 4.912337 | 5044.944442 | 1.842041 | 5044.944442 | 5046.786483 | 0.000000 | 1.842041 |
986 | 6.195677 | 5051.140119 | 2.012578 | 5051.140119 | 5053.152697 | 0.000000 | 2.012578 |
987 | 4.246305 | 5055.386424 | 3.641099 | 5055.386424 | 5059.027523 | 0.000000 | 3.641099 |
988 | 0.351196 | 5055.737619 | 2.405110 | 5059.027523 | 5061.432633 | 3.289904 | 5.695014 |
989 | 6.389141 | 5062.126760 | 1.465794 | 5062.126760 | 5063.592554 | 0.000000 | 1.465794 |
990 | 0.332100 | 5062.458860 | 1.876872 | 5063.592554 | 5065.469426 | 1.133695 | 3.010566 |
991 | 4.218615 | 5066.677475 | 2.249977 | 5066.677475 | 5068.927451 | 0.000000 | 2.249977 |
992 | 44.402375 | 5111.079850 | 1.959461 | 5111.079850 | 5113.039311 | 0.000000 | 1.959461 |
993 | 11.676260 | 5122.756110 | 1.253784 | 5122.756110 | 5124.009894 | 0.000000 | 1.253784 |
994 | 2.951483 | 5125.707593 | 2.392283 | 5125.707593 | 5128.099877 | 0.000000 | 2.392283 |
995 | 1.418355 | 5127.125948 | 2.397739 | 5128.099877 | 5130.497616 | 0.973929 | 3.371668 |
996 | 1.772244 | 5128.898192 | 1.610387 | 5130.497616 | 5132.108002 | 1.599424 | 3.209810 |
997 | 0.498313 | 5129.396505 | 2.140898 | 5132.108002 | 5134.248901 | 2.711497 | 4.852395 |
998 | 6.645040 | 5136.041545 | 2.460836 | 5136.041545 | 5138.502382 | 0.000000 | 2.460836 |
999 | 10.574862 | 5146.616407 | 2.721448 | 5146.616407 | 5149.337855 | 0.000000 | 2.721448 |
1000 rows × 7 columns
simulointi[['jonotus', 'kokonais_aika']].describe()
jonotus | kokonais_aika | |
---|---|---|
count | 1000.000000 | 1000.000000 |
mean | 0.719808 | 2.700317 |
std | 1.245056 | 1.332166 |
min | 0.000000 | 0.668122 |
25% | 0.000000 | 1.858800 |
50% | 0.000000 | 2.314290 |
75% | 1.122697 | 3.137720 |
max | 10.021099 | 11.976497 |
#Tästä näkee nousevana trendinä, jos jono kasvaa ajan kuluessa
simulointi[['jonotus', 'kokonais_aika']].plot()
<matplotlib.axes._subplots.AxesSubplot at 0x1b4a3ecca58>
simulointi[['kokonais_aika', 'jonotus']].plot.hist(subplots=True, sharex=True, sharey=True)
array([<matplotlib.axes._subplots.AxesSubplot object at 0x000001B4A57CD6A0>, <matplotlib.axes._subplots.AxesSubplot object at 0x000001B4A3F45A90>], dtype=object)