Aspiring Actuary: 5 Tips for Your First Actuarial Exam

As all good (aspiring) actuaries do I will start this article with a few assumptions. First, I assume you have some familiarity with the actuarial exam process (check out my previous article if needed). I’m also going to assume that you are writing one of the Computer-Based Testing (CBT) Exams – likely Exam P or Exam FM. Here are a few tips I’ve compiled that have helped me succeed with the “prelim” SOA/CAS exams.

1. Start Early

If I wanted to make this article even more click-baity than it already was, I would list this as Step 0. Underestimating the time commitment it takes to write these exams is the number one trap I see people falling into. I would equate the time spent on a prelim exam approximately to an upper year university math course – something that you can’t (or shouldn’t) study for in a just a few days. Remember, the pass mark on these exams is ~70%, which means there is less room for error than what you may be used to.

The exam syllabus has a wide breadth. I would use the 100 meter puddle analysis; you are covering a little bit of each of many topics. This lends itself well to setting a schedule. When you sign up for your exam date, take a look at the number of days you have left and set yourself up an Excel spreadsheet with all the topics and your goal completion date. Don’t forget to leave yourself time for practice problems!

2. Get a Good Calculator, and Get Good With It.

This is a very close second in my list of most important tips. The exams will be crunched for time, and it is essential that you get familiar and accurate with your calculator. My Exam 5 (CAS – Basic Ratemaking) proctor make a comment after our exam about this: “It’s amazing to see you kids these days, bringing multiple calculators to the exam and using both your thumbs to type!”

Remember that the SOA has an approved list of calculators. For all exams I would recommend the TI-30XS MultiView (You can support this blog by buying it via the Amazon link). It has the advantage of being able to easily scroll through past calculations as well as many summary statistic functions which can provide shortcuts for certain problems. Above all the buttons on this calculator are responsive and accurate, meaning fewer mistakes. If you have any questions on how to use it please leave me a comment.

3. Choose the Right Study Material (For You)

You are “lucky” in the sense that the prelims have a large amount of study material to choose from. Many companies publishes study guides, practice exams and online exams to help you learn the material and get a feel for the types of questions you’ll be asked. Of course, you can also study from the source material (the textbooks found on the syllabus), however many exam passers you speak to will argue for their alternative study source.

Of course the one caveat for these materials is that they can get quite expensive, and seeing as you are writing your first actuarial exam you may not have the backing of a company yet to pay for it. In this case I would recommend trying the free samples that each of the companies put out – you’ll have the advantage of finding the study material that works best for you as well as getting some extra study time in.

4. Utilize Old Exams and Example Questions

These are the single most important study tool at your disposal. They’re also free! For the CBT exams, the SOA has released sets of practice questions as well as online practice exams for Exam P and Exam FM. For whatever reason the SOA doesn’t seem to have the .PDFs posted on a page on their website, but they’re easy enough to find by Googling “SOA Exam X Practice Problems”.

There will always be debates as to whether these questions are harder or easier than the actual exams, but they are definitely an excellent way to familiarize yourself with the SOA’s exam problem wording. I recommend you study these closely and ensure that you fully understand the answers.

5. Ask Yourself If You’re Being Productive

You may have heard the “100 hour rule” that is thrown around in actuarial circles. It states that for every hour an exam is, you should put in 100 hours worth of study time. For the first few exams this equates to 300 hours of quality studying. Remember, the pass rate for Exam P hovers around 50% (see While there are always exceptions, I would be comfortable with claiming that if you follow this rule and put in 300 hours of dedicated studying time I would expect you to be in the passing half of the group. This requires discipline – ask yourself while you’re studying if you’re actually studying. Did you spend 20 minutes of the last hour browsing Facebook? That time doesn’t count.

At the same time, ensure that you take breaks. Or, if you’re on a roll but finding the material isn’t sticking, I find that switching to a new topic or question set will reboot my motivation.


Actuarial Science in Python – Loss Triangles

Loss Triangles are an essential tool for Property & Casualty actuary. They are a visual representation of the development of claims overtime, and are a starting point for many predictive analysis techniques such as the Chain Ladder method.

The code and example data is available at my GitHub.

For this example, we will look at a Policy Year  triangle with 12 Month developments. Since the purpose of this article is to demonstrate how to create a loss triangle in Python, I will not go into too much of the technical, but look out for future posts where I’ll go into more details.

The following triangle (created using Excel and simulated data) is an example of our end goal. Data is presented as of December-31st-2017.


How do we interpret this triangle? Let’s take a look at the first row, denoted by Policy Year 2014. Any policy which starts (the “effective date”) anytime in 2014 will fall into this category. The columns denote the development in months. For policy year 20XX and development Y, the corresponding cell represents the cumulative claims reported for policies written in 20XX as of Y months from January-1-20XX.

For example, take a look at PY 2014 development 24. This tells us that: “As of Dec-31st-2015, there have been $1,000 worth of claims reported on policies written during 2014″. Take a moment to reason to yourself why the data presents itself as a triangle. You’ll note that as each 12 month period passes, a new entry is added for each policy year along the diagonal, hence increasing the size of the triangle.

Loss Triangles In Python

More often than not, loss triangles are created in Excel. While this works well for creating the triangles, learning how to replicate this process in Python (or R!) will allow you to easily apply analysis techniques via additional Python scripts.

First, let’s take a look at the raw transactional data (again, simulated for example purposes):

This looks like typical claims data. Each row represents a transaction, and we’re given the Policy ID, Claim ID, Dates and Transaction Amounts. In this example, we will be focusing on creating a Policy Year claims triangle as is the above example.

If you do not have Python set up yet, I recommenced doing a Google search for one of the many guides or videos to help. We will be using the NumPy and Pandas packages:

import numpy as np
import pandas as pd

We will now import the data. It is good practice to check to see if there is any missing data as well:

path = "C:/MY_PATH/ClaimsExample.csv"
claims = pd.read_csv(path, sep = ",")
claims = pd.DataFrame(claims)

# Check for missing data
Policy_ID                False
Claim_ID                 False
Policy_Effective_Date    False
Accident_Date            False
Report_Date              False
Transaction_Date         False
Indemnity                False
Expenses                 False
Total                    False
dtype: bool

Now, the first thing we’ll need to calculate is the development or lag for each line. In this case, the lag is calculated as the Transaction Year – Policy Year + 1. Note the semantics here – we are calculating the amount reported for the Policy as at Dec/31 of the Transaction year, thus the “+1” is needed.

We must extract the Year from the given dates. The methodology used will depend on your data formatting.

claims['Policy_Year'] = [int(x[-4:]) for x in claims['Policy_Effective_Date']]
claims['Transaction_Year'] = [int(x[-4:]) for x in claims['Transaction_Date']]

Next, we can calculate the lags.

claims['PY_Lag'] = claims['Transaction_Year'] - claims['Policy_Year'] + 1

Let’s take a look at a few rows of our data now for spot checking.

   Policy_ID  Claim_ID Policy_Effective_Date Accident_Date Report_Date  \
0        101         1              1/1/2010      7/1/2010    8/1/2010   
1        101         1              1/1/2010      7/1/2010    8/1/2010   
2        101         1              1/1/2010      7/1/2010    8/1/2010   
3        101         1              1/1/2010      7/1/2010    8/1/2010   
4        101         1              1/1/2010      7/1/2010    8/1/2010   

  Transaction_Date  Indemnity  Expenses  Total  Policy_Year  Transaction_Year  \
0         9/1/2010      100.0      50.0  150.0         2010              2010   
1        11/1/2010      200.0      20.0  220.0         2010              2010   
2         1/1/2011      300.0       0.0  300.0         2010              2011   
3         3/1/2011      200.0       0.0  200.0         2010              2011   
4         5/1/2011       50.0       0.0   50.0         2010              2011   

0       1  
1       1  
2       2  
3       2  
4       2 

Looks like our code worked! As expected, lines with the same PY and TY show a lag of one (e.g. 12 months).

Next we get to use a bit of Pandas Dataframe manipulation. We are only interested in the development in the aggregate, thus we need to sum over the policies at each lag for each policy year. We’re going to combine losses and expenses in this example, thus we use the total column.

Here is the code and result, which I will walk through:

py_data = claims['Total'].groupby([claims['Policy_Year'],claims['PY_Lag']]).sum().reset_index()
   Policy_Year  PY_Lag    Total
0         2010       1    370.0
1         2010       2   6910.0
2         2010       3   -200.0
3         2010       4   -600.0
4         2011       1    960.0
5         2011       2   4320.0
6         2011       3    100.0
7         2012       1   1090.0
8         2012       2   8550.0
9         2013       1  21720.0

This may seem complicated, but we can break it down into steps:

  • claims['Total'] : We are choosing the Total column
  • groupby([claims['Policy_Year'],claims['PY_Lag']]) : We want to see the total column in the aggregate for each combination of Policy_Year and PY_Lag
  • sum(): We are choosing sum as our aggregate function
  • reset_index() : This is a bit trickier, it forces the DataFrame to reset the “index” for each line so that Policy_Year and PY_Lag are forced into their own columns. This may be easier to explain by looking at the result without the reset_index function. Try it out yourself!

We are now ready to make out triangle. The Panadas function “pivot_table” works very similarly to Pivot Tables in Excel, which you might be more familiar with. We first need to calculate the cumulative sum at each lag for our policy years. This is done using a similar technique to above.

py_data['cumsum'] = py_data["Total"].groupby(py_data["Policy_Year"]).cumsum()
py_cumu_triangle = pd.pivot_table(py_data, index = ["Policy_Year"], columns = ["PY_Lag"], values = ["cumsum"])
PY_Lag             1       2       3       4
2010           370.0  7280.0  7080.0  6480.0
2011           960.0  5280.0  5380.0     NaN
2012          1090.0  9640.0     NaN     NaN
2013         21720.0     NaN     NaN     NaN

Success! We have created a loss triangle using Python. If you are familiar with loss triangles you will notice that this one does not look like a triangle you would expect for stable business. That, however, is something to be discussed in a future post.

Post Script:

We are also sometimes interested in a incremental loss triangle. We can easily edit the code above to accomplish this. Try out the code below yourself:

py_triangle = pd.pivot_table(py_data, index = ["Policy_Year"], columns = ["PY_Lag"], values = ["Total"])
PY_Lag             1       2      3      4
2010           370.0  6910.0 -200.0 -600.0
2011           960.0  4320.0  100.0    NaN
2012          1090.0  8550.0    NaN    NaN
2013         21720.0     NaN    NaN    NaN

Aspiring Actuary: Calculator Skills for Exam MFE

As I write this article there is just over a month until the next sitting of the Society of Actuaries “Models for Financial Economics” (MFE) Exam. If you plan on writing it this sitting, good luck! If I had one piece of advice it would be to learn how to use your calculator quickly and accurately – I’m going to teach you some tricks that will make some of the seemingly daunting questions straightforward.

What calculator should I be using?

The SOA maintains a list of calculators that one can bring to an official exam. If you’re going to take just one thing away from this article make it that the  TI-30XS MultiView Calculator is the only calculator you will ever need. (Well, possibly the BA II, but that’s for another article). With enough practice and knowledge of the calculator’s unique functions I guarantee you will finish problems much faster than if you had the single view version. Let me convince you why with a couple examples.

Using the Memory Function

Did you just have to convert a nice, round annual effective interest rate to a disgusting, compounded fortnightly, discount rate? Yeah, there’s no way we’ll ever accurately type that number back in. Here is where the “sto->” and “x y z” buttons come in handy. After you hit enter to get your answer, simply hit “sto ->” ,”x”,”enter” and your entry will be saved. You can then recall it in a later function by hitting the “x” button again.

Let’s try this out by converting 6% to it’s semi-annually compound equivalent, saving it, then accumulating $100 today six months forward:


Easy eh? Best part is, you can store up to seven variables at once which really comes in handy during some of the more lengthy binomial tree questions.

That was boring, my TI-30XIIS can do that too.

All right, I hear you. Let me turn your attention to a specific type of question, this one is #51 in the SOA’s Official MFE practice questions (which if you didn’t know about, today is your lucky day because you just gained an invaluable study resource). Here it is:


Now, I’m going to focus on the part of the answer where you need to calculate the sample variance of the given data. I’ll leave the rest of the question as an exercise to the reader (I’ve always wanted to be able to say that).

As someone who is still reading this, you probably know the formula for sample variance is as follows:

S_x = \frac{1}{n-1} \sum_{i=1}^n (x_j - \bar{x})^2

Now, for this question we need the sample variance of the continuously compounded monthly returns. We find those numbers by taking the (natural) logarithm of the price one month over the price the month before, ending up with six values. Here is my chicken scratch version of doing this by hand:

I really should have opted for the printer with a scanner on boxing day…

Can you imagine doing that during an exam? That’s not even the whole question! Let me show you how to do this much quicker.

The “data” function

See that oddly named “data” button on the second row of the multiview? Click it. You’ll come to this screen:


You’ll learn to love this screen. Enter the values that we want to find the variance of one by one, pressing enter after each on. Note – I’m entering these as “ln(56/54) -> enter -> ln(48/56) -> enter …”. The calculator does the necessary calculation automatically!


Now, hit “2nd -> quit”. Your numbers will be saved. Now we’re ready to see some magic: hit “2nd -> data(stat)”. This brings us to the STATS screen. Since we are only dealing with line one, hit “1: 1-Var Stats”, “Data: L1”, “FRQ: ONE”. Hit CALC.


This screen shows a list of different statistics that the calculator has calculated for you. We can see the first number, n, is our number of entries, x bar is our average, and Sx is our sample standard deviation! Scroll down to Sx, press enter, and it will show up as a variable in the calculation screen. Remember, variance is standard deviation squared, so square this number:


Look familiar? That was much quicker than doing it by hand, and there is a much lower chance that you’ll mistype something when using your calculator. Using this method can really make a difference when it comes to these tedious calculations.

You probably noticed that there is more the the data screen than what we used. In a future article I’ll be looking at some methods for using the TI-30XS Multiview for Exam C, so look out for it!


Aspiring Actuary: Exam Basics

You know nothing about what it takes to become an actuary. At least, that is what I’m going to assume for this post. I know from experience that without guidance it can be difficult to find all the information you need to make an informed decision on pursing an actuarial designation – through this series of posts I aim to alleviate some of your concerns.

This posts assumes you are pursuing a designation in the US or Canada, there are separate organizations in the UK.

What exams do I need to take to become an actuary?

The first thing you should know is that there are two main regulating bodies that offer exams in North America to qualify actuaries. The Society of Actuaries – which will be my focus – offers exams for life insurance, pension and health actuaries (among others). The second is the Casualty Actuarial Society, who focus on property and casualty insurance.

At some point in your career you will have to decide which designation to pursue. Both societies offer two levels of designation at the associate (ASA or ACAS) level and the fellowship (FSA or FCAS) level. Each level involves writing a number of rigorous exams on your own time and have a large study commitment requirement.

Luckily as of January 2016 there are still four exams that are offered jointly by the SOA and CAS. This means that you aren’t locked into one path right away, you have some time to wet your feet in the profession before you narrow your focus.  Often, as I did, the companies that you do your co-ops or internships at will determine which exams you write. If you are doing an internship for a life insurance company you will be writing the life insurance (SOA) exams and vice versa. Many companies offer financial support to students to help with exam writing.

The ASA (Associate to the Society of Actuaries) designation requires completed of five exams: P, FM, MFE, MLC and C. Note that all of these except for MLC will also count towards an ACAS designation.

Contents of ASA Exams

Click the links to be redirected to the SOAs homepage for each exam. Registration, syllabi and study materials are all available there.

Exam P (Probability)

Exam P is where most people will begin writing exams. Overall it has little to do specifically with actuarial topics, it is more of a way to develop the mathematical background that comes with later exams. You’ll find that a good understanding of calculus (Calculus II at Waterloo) and a basic understanding of statistics will help you pass this exam.

Exam FM (Financial Mathematics)

This exam is split into two sections. The first deals with interest theory and the time value of money. You will learn about discounting cash flows, annuities, loans and bonds. The second section deals with derivatives (of the stock market type, not calculus!), forward rates and different types of investment strategies. If you are early in your undergrad and are not in an actuarial science program I would expect you to have less exposure to this material – adjust your study time accordingly.

Exam MFE (Models for Financial Economics)

In many ways Exam MFE is the second level to exam FM. It is a very math intensive exam that will require you to know how to use your calculator accurately to stay on time. Recently updated, the syllabus now focusses mainly on the valuation of financial derivatives – you’ll learn to love (read: “love”) the Black-Scholes model.

Exam MLC (Models for Life Contingencies)

I have less to say about MLC as I have yet to take it (studying for the May 2016 sitting!) – I’ll be sure to update this post once I have finished. MLC takes many of the concepts from previous exams and adds a new twist: Payments only occur while the policyholder is alive. Here you will learn about life contingent annuities and the math behind the different types of insurance policies. Many people will say that MLC was the hardest of the ASA level exams, so be sure to set aside a lot of time to study for this one.

Exam C (Construction of Actuarial Models)

Covering a large array of topics, Exam C is the most statistics intensive of the ASA level exams. Personally, I also found it to be the most interesting of the exams I’ve taken. The syllabus is split into loss models, credibility and simulation. Loss models encompasses the bulk of the exam and requires a high understanding of calculus, sums of series and random variables. Many fellow students I have spoken with about Exam C agree that in addition to the mathematics much of the difficultly comes from the breadth of the syllabus and the time it takes to learn it all.

Okay, I know the basics of the exams. Now what?

I plan on continuing to write posts related to exams. Hopefully some of the study habits I have picked up can help others to study more efficiently. If you have any specific questions please leave a comment or shoot me an email, maybe it will spark inspiration for a new article.