Gsm Operator Switching

No preview image

2 collaborators

Default-person Kurtuluş Şahin (Author)
Melike Ateş (Team member)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by the author
Model was written in NetLogo 5.0.5 • Viewed 208 times • Downloaded 27 times • Run 0 times
Download the 'Gsm Operator Switching' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Comments and Questions

Gsm Operator Switching

The study is conducted to understand and evaluate the switching tendency of GSM customers from one GSM operator to another in specific circumstances.

Posted about 7 years ago

Click to Run Model

globals
[
  
  UnitsOfTime ;total tick
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;;;;;;;;;;;;;;;;;;  OPERATOR ATTRIBUTES  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
 
  num-operators
  Number_Of_Turkcell_Customer 
  Number_Of_Vodafone_Customer
  Number_Of_Avea_Customer
  
  prestige_Of_Turkcell 
  prestige_Of_Vodafone 
  prestige_Of_Avea     
  
    
  ;price_factor_of_Turkcell   ;slider at interface. 
  ;price_factor_of_Vodafone   ;slider at interface
  ;price_factor_of_Avea       ;slider at interface
  
  
  ;;;;;;;;;;;;;;;;;;;;;;;;  VARIABLES FOR CHURN RATE CALCULATIONS  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  churn_Rate_Turkcell  ;her ay abonelerin yüzde kaçı operatörü terketti. gerçek istetistik % 3 civarında
  churn_Rate_Vodafone
  churn_Rate_Avea
  average_churn_Rate_Turkcell
  average_churn_Rate_Vodafone
  average_churn_Rate_Avea
  total_churn_Rate_Turkcell
  total_churn_Rate_Vodafone
  total_churn_Rate_Avea
   
  churn_Number_Turkcell ;her ay kaç abone operatörü terketti
  churn_Number_Vodafone
  churn_Number_Avea
  
  ;;;;;;;;;;;;;;;;;;;;;;;; END  VARIABLES FOR CHURN RATE CALCULATIONS  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;;;;;;;;;;;;;;;;;; END OPERATOR ATTRIBUTES  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
  
  
  
  
  
]

turtles-own
[
  
  
  operator_type ;0=turkcell yellow, 1=vodafone red, 2=avea blue
  income
  age
  invoice_type ; 0=invoice, 1=prepaid
  last_time_changed ;if user doent chance operator at tick, this variable increase 1
  commitment_time ;if there is no commitment it is 0, if not it is shows commitment time as month
  
  
  total_switch_cost ; it contains different operator switching cost , commitment time cost , last time changed cost , income and age cost
  
  
  ; values for these variables are calculated in set demand method.
  speech_demand 
  message_demand
  internet_demand
  
  ; the importance factor given by the customer to each of speech , message and internet.
  speech_factor
  message_factor
  internet_factor
  
  turkcell_utility
  vodafone_utility
  avea_utility
  
  ;different_operator_switch_cost ;slider at interface
  
  turkcell_switching_probablity
  vodafone_switching_probablity
  avea_switching_probablity
  
]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;     SETUP   ;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup 

clear-all

set num-operators 3
set UnitsOfTime 360 
create-turtles 100
[
  set sıze 1 
  setxy random-xcor random-ycor  
]

set-brand-effect ; sets operator's brand value 

set-operator
set-demand
set-age
set-income
set-invoice-type
set-commitment-time
set-factor
  
       
  
show "Baslangicta Olan"
count-turtles
reset-ticks
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;  END SETUP  ;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;      GO     ;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to go
   
  ask turtles [ switch ]
  
  calculate-churn-rate ; the percentage of customers who leaves their operator is calculated at each tick through this method.
  
  reset-churn-number
  ;set-demand-each-tick
  
  tick
  show word "Ticks: " ticks 
  count-turtles
   
  if ticks >= UnitsOfTime [stop] ; kaç kez switching yapılacağını sayıyor 
end 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;    END GO   ;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;    SWITCH   ;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to switch
 
   set turkcell_utility calculate-total-turkcell-utility
   set vodafone_utility calculate-total-vodafone-utility
   set avea_utility calculate-total-avea-utility
   
   
   calculate-switching-probablity
     
   ;customer changes his/her operator based on the probablity
   change-operator
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;  END SWITCH  ;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;; PARAMETER SETTING FUNCTIONS ;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Real income values are set for each of ten group.

to set-income 
  ask turtles
  [
    let randomIncome random 100
    
    ifelse(randomIncome < 10 ) 
    [      
      set income 2114 
    ]
    [    
      ifelse(randomIncome < 20 ) 
      [  
        set income 3523        
      ]
      [
        ifelse(randomIncome < 30 ) 
        [  
          set income 4631          
        ]
        [
          ifelse(randomIncome < 40 ) 
          [            
            set income 5739          
          ]
          [
            ifelse(randomIncome < 50 ) 
            [   
              set income 6947
            ]
            [
              ifelse(randomIncome < 60 ) 
              [
                set income 8256 
              ]
              [
                ifelse(randomIncome < 70 ) 
                [
                  set income 9760                  
                ]
                [
                  ifelse(randomIncome < 80 ) 
                  [                    
                    set income 11880                    
                  ]
                  [
                    ifelse(randomIncome < 90 ) 
                    [
                      set income 15505
                    ]
                    [
                      if(randomIncome < 100 ) 
                      [
                        set income 32420 
                      ]
                    ]
                  ]
                ]
              ]
            ]
          ]
        ]
      ]
    ]
  ]
end 


; This method sets real age values for age groups.

to set-age
  ask turtles
  [
    let randomAgeProbability random-float 1
    
    ifelse(randomAgeProbability < 0.40)
 
    [
      set age (random 20) + 10
    ]
    [
      ifelse(randomAgeProbability < 0.75)
      
      [
        set age (random 20) + 30
      ]
      [
        ifelse(randomAgeProbability < 0.94)
        
        [
          set age (random 20) + 50
        ]
        [
          if(randomAgeProbability < 1)
          
          [
            set age (random 20) + 70
          ]         
        ]
      ]     
    ] 
  ]
end 

to set-invoice-type
  ask turtles
  [
    
    
    if (operator_type = 0)
    [
      let randomNumber random 100
      
      ifelse(randomNumber < 60)
      [
        set invoice_type 1
      ]
      [
        set invoice_type 0
      ]
    ]
    
    
    if (operator_type = 1)
    [
      
      let randomNumber random 100
      ifelse(randomNumber < 61)
      [
        set invoice_type 1
      ]
      [
        set invoice_type 0
      ]
    ]
    
    if (operator_type = 2)
    [
      
      let randomNumber random 100
      ifelse(randomNumber < 54)
      [
        set invoice_type 1
      ]
      [
        set invoice_type 0
      ]
    ] 
  ]
end 

to set-commitment-time
   ask turtles
  [
    if(invoice_type = 0)
    [
      set commitment_time random 13
    ]
  
  ]
end 

to set-demand
  ask turtles
  [
    if(operator_type = 0)
    [
      set speech_demand random-normal 186 10  ;turkcell kullanıcılarına ortalama 186 dakika olacak şekilde, 10 standard devieyşınla kullanıcılara konuşma süresi set ediyor.  
    ]
    
    if(operator_type = 1)
    [
      set speech_demand random-normal 271 10  ;vodafone kullanıcılarına ortalama 271 dakika olacak şekilde, 10 standard devieyşınla kullanıcılara konuşma süresi set ediyor.
    ]
    
    if(operator_type = 2)
    [
      set speech_demand random-normal 260 10  ;avea kullanıcılarına ortalama 260 dakika olacak şekilde, 10 standard devieyşınla kullanıcılara konuşma süresi set ediyor.
    ]
      
    if(operator_type = 0)
    [
      set message_demand random-normal 140 10  
      
    ]
    
    if(operator_type = 1)
    [
      set message_demand random-normal 296 10  
    ]
    
    if(operator_type = 2)
    [
      set message_demand random-normal 221 10  
    ]
    
  
   
    let randomNumberInternet random-float 100
      
    ifelse(randomNumberInternet < 39.41)
    [
      set internet_demand 0  
    ]
    [
      ifelse(randomNumberInternet < (39.41 + 7.89))
      [
        set internet_demand 30  
      ]
      [
        
        ifelse(randomNumberInternet < (39.41 + 7.89 + 5.68))
        [
          set internet_demand 75  
        ]
        [
          
          ifelse(randomNumberInternet < (39.41 + 7.89 + 5.68 + 9.72))
          [
            set internet_demand 175  
          ]
          [
            
            
            ifelse(randomNumberInternet < (39.41 + 7.89 + 5.68 + 9.72 + 21.48))
            [
              set internet_demand 625  
            ]
            [
              
              ifelse(randomNumberInternet < (39.41 + 7.89 + 5.68 + 9.72 + 21.48 + 14.16))
              [
                set internet_demand 2500  
              ]
              [
                
                if(randomNumberInternet < (39.41 + 7.89 + 5.68 + 9.72 + 21.48 + 14.16 + 1.66))
                [
                  set internet_demand 6000 
                ]          
              ]              
            ]            
          ]
        ]
       ]       
    ]     
  ]
end 

; customers' demand changes with this function

to set-demand-each-tick
  ask turtles
  [
    ; bu kısım değiştirilecek 
    
      let randomNumberSpeachChange random ((speech_demand * 0.2) * 2)
    
      set speech_demand speech_demand + ( (speech_demand * 0.2 ) - randomNumberSpeachChange)  ;at each tick, speech demand changes between -30, +30
      
      if (speech_demand < 0)
      [ set speech_demand 0 ]
      
     ; --------------------------------------------------------
      
      let randomNumberMessageChange random ((message_demand * 0.5) * 2)
    
      set message_demand message_demand + ( (message_demand * 0.5) - randomNumberMessageChange)  ;at each tick, message demand changes between -30, +30
      
      if (message_demand < 0)
      [ set message_demand 0 ]
      
     ; ------------------------------------------------------------
      
      let randomNumberInternetChange random ((internet_demand * 0.4) * 2)
    
      set internet_demand internet_demand + ( (internet_demand * 0.4) - randomNumberInternetChange)  ;at each tick, internet demand changes between -100, +100
      
      if (internet_demand < 0)
      [ set internet_demand 0 ]
    
  ]
end 

to set-factor
  ask turtles
  [
    
  let randomNumberForSpeech random-float 1
  
  set speech_factor randomNumberForSpeech  ; speach factor between 0-1 a float number
  
  let randomNumberForMessage random-float 0.3
  
  set message_factor randomNumberForMessage
  
  let randomNumberForInternet random-float 0.7
  
  set internet_factor randomNumberForInternet
  ;---------------------------------------------
  
  ]
end 

to set-operator
  
ask turtles      ; operator types are set to the customers at real percentage. 
[
  let randomNumber random 9999
  
  ifelse(randomNumber < 5052) ;turkcell
  [
    set operator_type 0
    set color yellow
  ]
  [
    ifelse(randomNumber < (5052 + 2861)) ;Vodafone
    [
       set operator_type 1
       set color red
    ]
    [
      set operator_type 2 ;avea
      set color blue 
    ]
    
  ] 
]  
end 



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;; END PARAMETER SETTING FUNCTIONS ;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;






;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; UTILITY CALCULATION ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;; SPEECH UTILITY FUNCTIONS ;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;speech_demand , speech_factor are attributes of agents

to-report calculate-turkcell-speech-utility
  
   report  (speech_factor * (sqrt speech_demand)) - (price_factor_of_Turkcell * (sqrt speech_demand))
end 

to-report calculate-vodafone-speech-utility
  
  report  (speech_factor * (sqrt speech_demand)) - (price_factor_of_Vodafone * (sqrt speech_demand)) 
end 

to-report calculate-avea-speech-utility
  
   report (speech_factor * (sqrt speech_demand)) - (price_factor_of_Avea * (sqrt speech_demand)) 
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;; MESSAGE UTILITY FUNCTIONS ;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;message_demand , message_factor are attributes of agents

to-report calculate-turkcell-message-utility
 
   report  (message_factor * (sqrt message_demand)) - (price_factor_of_Turkcell * (sqrt message_demand)) 
end 

to-report calculate-vodafone-message-utility
  
  report  (message_factor * (sqrt message_demand)) - (price_factor_of_Vodafone * (sqrt message_demand))
end 

to-report calculate-avea-message-utility
  
   report (message_factor * (sqrt message_demand)) - (price_factor_of_Avea * (sqrt message_demand))
end 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;; INTERNET UTILITY FUNCTIONS ;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;internet_demand , internet_factor are attributes of agents

to-report calculate-turkcell-internet-utility
 
   report  (internet_factor * (sqrt internet_demand)) - (price_factor_of_Turkcell * (sqrt internet_demand)) 
end 

to-report calculate-vodafone-internet-utility
  
  report  (internet_factor * (sqrt internet_demand)) - (price_factor_of_Vodafone * (sqrt internet_demand)) 
end 

to-report calculate-avea-internet-utility
  
   report (internet_factor * (sqrt internet_demand)) - (price_factor_of_Avea * (sqrt internet_demand)) 
end 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;; TOTAL UTILITY FUNCTIONS ;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to-report calculate-total-turkcell-utility

  calculate-switch-cost ; it calculates total switch cost
  
   ifelse (operator_type = 0)
   [
      report calculate-turkcell-speech-utility + calculate-turkcell-message-utility + calculate-turkcell-internet-utility + prestige_of_Turkcell 
 
     
   ]
   [
      report calculate-turkcell-speech-utility + calculate-turkcell-message-utility + calculate-turkcell-internet-utility + prestige_of_Turkcell   - total_switch_cost
   ]
end 

to-report calculate-total-vodafone-utility
   
   ifelse (operator_type = 1)
   [
      report calculate-vodafone-speech-utility + calculate-vodafone-message-utility + calculate-vodafone-internet-utility + prestige_of_Vodafone
  
     
   ]
   [
      report calculate-vodafone-speech-utility + calculate-vodafone-message-utility + calculate-vodafone-internet-utility + prestige_of_Vodafone - total_switch_cost
   ]
end 

to-report calculate-total-avea-utility

   ifelse (operator_type = 2)
   [
      report calculate-avea-speech-utility + calculate-avea-message-utility + calculate-avea-internet-utility + prestige_of_Avea
     
   ]
   [
      report calculate-avea-speech-utility + calculate-avea-message-utility + calculate-avea-internet-utility + prestige_of_Avea - total_switch_cost
   ]
end 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; END UTILITY CALCULATION ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;         FUNCTIONS        ;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


; utility hesaplandıktan sonra probabililty log it mantığıyla hesaplanıyor 

to calculate-switching-probablity
   
   set turkcell_switching_probablity ( (e ^ turkcell_utility) / ( (e ^ turkcell_utility) +  (e ^ vodafone_utility) +  (e ^ avea_utility) ))
   
   set vodafone_switching_probablity ( (e ^ vodafone_utility) / ((e ^ turkcell_utility) + (e ^ vodafone_utility) + (e ^ avea_utility) ))
   
   set avea_switching_probablity ( (e ^ avea_utility) / ((e ^ turkcell_utility) + (e ^ vodafone_utility) + (e ^ avea_utility) ))
end 
   

; her operatorden ayrılan kişi sayısını sıfırlar.

to reset-churn-number
    
  set churn_Number_Turkcell 0
  set churn_Number_Vodafone 0
  set churn_Number_Avea 0
end 
  
   
; random number ve probablity nin alacağı değerlere göre operator değişiyor veya aynı kalıyor. 
; değişim gerçekleşirse eski operatorun churn numberı artıyor .

to change-operator
     
     let randomNumber (random-float 1)
     
     ifelse (randomNumber <= turkcell_switching_probablity ) 
     [ 
       
       set last_time_changed last_time_changed + 1
       if(operator_type = 0)
       [
         if(commitment_time > 0)
         [
           set commitment_time commitment_time - 1
         ]
       ]
       
       
       if(operator_type = 1)
       [ 
         set churn_Number_Vodafone churn_Number_Vodafone + 1
         set last_time_changed 0;
        
         ; eğer kullanıcı faturalı hat sahibiyse operatorunu değiştirdiği zaman belli bir oranda taahutlü hattı sececek 
         ;---------------------------------
         if(operator_type = 0)
         [
           let randomNumberInvoceProbability random 100
           if(randomNumberInvoceProbability < 90)
           [
             set commitment_time 12
           ]
         ]
         ;----------------------------------
         
       ]
       
       
       if(operator_type = 2)
       [ 
         set churn_Number_Avea churn_Number_Avea + 1 
         set last_time_changed 0;
     
      ; eğer kullanıcı faturalı hat sahibiyse operatorunu değiştirdiği zaman belli bir oranda taahutlü hattı sececek       
      ;--------------------------------------
         if(operator_type = 0)
         [
           let randomNumberInvoceProbability random 100
           if(randomNumberInvoceProbability < 90)
           [
             set commitment_time 12
           ]
         ]
       ;------------------------------------
       
       ]
       
       set color yellow
       set operator_type 0
       
         
     ]
  
     [
   
       ifelse (randomNumber < turkcell_switching_probablity + vodafone_switching_probablity )
         [ 
           
           set last_time_changed last_time_changed + 1
           if(operator_type = 0)
           [
             set commitment_time commitment_time - 1
           ]
           
           
           if(operator_type = 0)
           [ 
             set churn_Number_Turkcell churn_Number_Turkcell + 1
             set last_time_changed 0;
        ; eğer kullanıcı faturalı hat sahibiyse operatorunu değiştirdiği zaman belli bir oranda taahutlü hattı sececek      
        ;--------------------------------------
         if(operator_type = 0)
         [
           let randomNumberInvoceProbability random 100
           if(randomNumberInvoceProbability < 90)
           [
             set commitment_time 12
           ]
         ]
       ;---------------------------
             
           ]
       
           if(operator_type = 2)
           [ 
             set churn_Number_Avea churn_Number_Avea + 1
             set last_time_changed 0;
       
        ; eğer kullanıcı faturalı hat sahibiyse operatorunu değiştirdiği zaman belli bir oranda taahutlü hattı sececek              
        ;--------------------------------------
         if(operator_type = 0)
         [
           let randomNumberInvoceProbability random 100
           if(randomNumberInvoceProbability < 90)
           [
             set commitment_time 12
           ]
         ]
       ;---------------------------
           ]
           
           set color red
           set operator_type 1
           
         ]
         
         [
           ;if (randomNumber <= turkcell_probability + vodafone_probability + avea_probability )
           
           
           set last_time_changed last_time_changed + 1
           if(operator_type = 0)
           [
             set commitment_time commitment_time - 1
           ]
           
           if(operator_type = 0)
           [ 
             set churn_Number_Turkcell churn_Number_Turkcell + 1
             set last_time_changed 0;
      
      ; eğer kullanıcı faturalı hat sahibiyse operatorunu değiştirdiği zaman belli bir oranda taahutlü hattı sececek         
      ;--------------------------------------
         if(operator_type = 0)
         [
           let randomNumberInvoceProbability random 100
           if(randomNumberInvoceProbability < 90)
           [
             set commitment_time 12
           ]
         ]
       ;---------------------------
           ]
       
           if(operator_type = 1)
           [ 
             set churn_Number_Vodafone churn_Number_Vodafone + 1
             set last_time_changed 0;
   
      
       ; eğer kullanıcı faturalı hat sahibiyse operatorunu değiştirdiği zaman belli bir oranda taahutlü hattı sececek       
       ;--------------------------------------
         if(operator_type = 0)
         [
           let randomNumberInvoceProbability random 100
           if(randomNumberInvoceProbability < 90)
           [
             set commitment_time 12
           ]
         ]
       ;---------------------------
           ]
           
           set color blue
           set operator_type 2
                    
         ]   
   ]
end 

to calculate-churn-rate ;her ay abonelerin yüzde kaçı operatörü terketti. gerçek istetistik % 3 civarında
  
  set churn_Rate_Turkcell (churn_Number_Turkcell / ( Number_Of_Turkcell_Customer + 1)) * 100
  set churn_Rate_Vodafone (churn_Number_Vodafone /( Number_Of_Vodafone_Customer + 1)) * 100
  set churn_Rate_Avea  (churn_Number_Avea / (Number_Of_Avea_Customer + 1)) * 100
  
  if(ticks > 30)
  [
  set total_churn_Rate_Turkcell total_churn_Rate_Turkcell + churn_Rate_Turkcell
  set total_churn_Rate_Avea total_churn_Rate_Avea + churn_Rate_Avea
  set total_churn_Rate_Vodafone total_churn_Rate_Vodafone + churn_Rate_Vodafone
  
  
  set average_churn_Rate_Turkcell total_churn_Rate_Turkcell / ( ticks - 30)
  set average_churn_Rate_Avea total_churn_Rate_Avea / ( ticks - 30)
  set average_churn_Rate_Vodafone total_churn_Rate_Vodafone / ( ticks - 30)
  ]
end 

to calculate-switch-cost
  
  set total_switch_cost different_operator_switch_cost
  
  if(invoice_type = 0)
  [
     set total_switch_cost total_switch_cost + (different_operator_switch_cost * 0.2)
  ]
  
  ;;;;;;;;;;;;;;; SWITCH COST RELATED TO COMMITMENT TIME;;;;;;;;;;;
  if(commitment_time < 7)
  [
    
    set total_switch_cost total_switch_cost + (commitment_time * 0.1)
    
  ]
  if(commitment_time > 6)
  [
    set total_switch_cost total_switch_cost + ((12 - commitment_time) * 0.1)
    
  ]
  ;;;;;;;;;;;;;;; END SWITCH COST RELATED TO COMMITMENT TIME;;;;;;;;;;;
  
  
  ;;;;;;;;;;;;;;; SWITCH COST RELATED TO LAST TIME CHANGED ;;;;;;;;;;;
  if(last_time_changed < 13 )
  [ 
  set total_switch_cost total_switch_cost + ( (12 - last_time_changed) * 0.1)
  ]  
  ;;;;;;;;;;;;;;; END SWITCH COST RELATED TO LAST TIME CHANGED ;;;;;;;;;;;
  
  
  ;;;;;;;;;;;;;;; SWITCH COST RELATED TO INCOME ;;;;;;;;;;;
  ;set total_switch_cost total_switch_cost + (30 / income)
  
  
  ;;;;;;;;;;;;;;; SWITCH COST RELATED TO AGE  ;;;;;;;;;;;
  set total_switch_cost total_switch_cost + (age * 0.01)
end 

to count-turtles
  
  set Number_Of_Turkcell_Customer count turtles with [operator_type = 0]
  set Number_Of_Vodafone_Customer count turtles with [operator_type = 1]
  set Number_Of_Avea_Customer count turtles with [operator_type = 2]
  
  
  show word "Turkcell abone sayısı: "  Number_Of_Turkcell_Customer
  show word "Vodafone abone sayısı: " Number_Of_Vodafone_Customer
  show word "Avea abone sayısı     : " Number_Of_Avea_Customer

 print_churn_rate
end 

;;;;;;;;;;;;;; BRAND IMAGE OF OPREATOR ;;;;;;;;;;;

to set-brand-effect
  
 
 ;set  prestige_Of_Turkcell 47
 ;set  prestige_Of_Vodafone 24
 ;set  prestige_Of_Avea  18
 
 set  prestige_Of_Turkcell 45
 set  prestige_Of_Vodafone 25
 set  prestige_Of_Avea  20
end 

to print_average-speech
   
   show word "Turkcell konuşma ortalaması: "  mean [ speech_demand] of turtles with [operator_type = 0]
   show word "Vodafone konuşma ortalaması: "  mean [ speech_demand] of turtles with [operator_type = 1]
   show word "Avea konuşma ortalaması: "  mean [ speech_demand] of turtles with [operator_type = 2]
   show word "Total konuşma ortalaması: "  mean [ speech_demand] of turtles
   show "******"
   show word "Turkcell mesajlaşma ortalaması: "  mean [ message_demand] of turtles with [operator_type = 0]
   show word "Vodafone mesajlaşma ortalaması: "  mean [ message_demand] of turtles with [operator_type = 1]
   show word "Avea mesajlaşma ortalaması: "  mean [ message_demand] of turtles with [operator_type = 2]
   show word "Total mesajlaşma ortalaması: "  mean [ message_demand] of turtles
   show "******"
   show word "Turkcell internet ortalaması: "  mean [ internet_demand] of turtles with [operator_type = 0]
   show word "Vodafone internet ortalaması: "  mean [ internet_demand] of turtles with [operator_type = 1]
   show word "Avea internet ortalaması: "  mean [ internet_demand] of turtles with [operator_type = 2]
   show word "Total internet ortalaması: "  mean [ internet_demand] of turtles
   show "******"
end 

to print_churn_rate
    
    
   show word "Turkcell churn: "  churn_Rate_Turkcell
   show word "Vodafone churn: "  churn_Rate_Vodafone
   show word "Avea churn: "  churn_Rate_Avea
   
   show word "Turkcell average churn: "  average_churn_Rate_Turkcell
   show word "Vodafone average churn: "  average_churn_Rate_Vodafone
   show word "Avea average churn: "  average_churn_Rate_Avea
   
   ;show word "average churn: "  mean [ speech_demand] of turtles
end 
   
   
   ;; set demand değişecek
   ; change operatorde taahut kısmında yuzde 90 istimal olayı var 
   ; BRAND İMAGE İLE OYNA 
   
   
   
   
   
   
   
   
   
   

There is only one version of this model, created about 7 years ago by Kurtuluş Şahin.

Attached files

File Type Description Last updated
492_pre.pptx powerpoint Project Presentation about 7 years ago, by Kurtuluş Şahin Download
Modeling GSM Switching Behavior Of Customers In Turkey With Agent Based Modeling Methodology.pdf pdf Project Documentation over 6 years ago, by Kurtuluş Şahin Download

This model does not have any ancestors.

This model does not have any descendants.