diff --git a/configuration/aus_prospectus/special_datapoint_feature.json b/configuration/aus_prospectus/special_datapoint_feature.json new file mode 100644 index 0000000..49b7de4 --- /dev/null +++ b/configuration/aus_prospectus/special_datapoint_feature.json @@ -0,0 +1,9 @@ +{ + "management_fee_including_performance_fee": { + "regex_text": ["investment\\s*fees\\s*and\\s*costs\\W*including\\s*performance\\s*fees"], + "effective_datapoints": ["management_fee_and_costs"], + "exclude_datapoints": ["performance_fee_costs"], + "provider_ids": ["0C00005549"], + "provider_names": ["Vision Super Pty Ltd"] + } +} \ No newline at end of file diff --git a/core/data_extraction.py b/core/data_extraction.py index 82a35de..f7c3eaa 100644 --- a/core/data_extraction.py +++ b/core/data_extraction.py @@ -75,11 +75,33 @@ class DataExtraction: self.datapoint_type_config = self.get_datapoint_type() self.datapoint_name_config = self.get_datapoint_name() self.replace_table_header_config = self.get_replace_table_header_config() + self.special_datapoint_feature_config = self.get_special_datapoint_feature_config() + self.special_datapoint_feature = self.init_special_datapoint_feature() + self.datapoint_reported_name_config, self.non_english_reported_name_config = \ self.get_datapoint_reported_name() self.extract_way = extract_way self.output_image_folder = output_image_folder + def get_special_datapoint_feature_config(self) -> dict: + special_datapoint_feature_config_file = os.path.join(self.configuration_folder, "special_datapoint_feature.json") + if not os.path.exists(special_datapoint_feature_config_file): + return {} + special_datapoint_feature_config = {} + with open(special_datapoint_feature_config_file, "r", encoding="utf-8") as f: + special_datapoint_feature_config = json.load(f) + + return special_datapoint_feature_config + + def init_special_datapoint_feature(self) -> dict: + special_datapoint_feature = {} + if self.special_datapoint_feature_config is None or \ + len(list(self.special_datapoint_feature_config.keys())) == 0: + return special_datapoint_feature + for feature in list(self.special_datapoint_feature_config.keys()): + special_datapoint_feature[feature] = {"page_index": []} + return special_datapoint_feature + def get_document_category_production(self): document_category = None document_production = None @@ -293,7 +315,9 @@ class DataExtraction: data_list, datapoint_list_with_production_name = self.post_adjust_for_value_with_production_name(data_list) data_list = self.remove_duplicate_data(data_list) if "management_fee" not in datapoint_list_with_production_name and "management_fee_and_costs" not in datapoint_list_with_production_name: - data_list = self.post_adjust_management_fee_costs(data_list) + data_list, adjust = self.post_management_fee_exclude_performance_fee(data_list) + if not adjust: + data_list = self.post_adjust_management_fee_costs(data_list) data_list = self.check_administration_fees(data_list) return data_list @@ -703,6 +727,64 @@ class DataExtraction: raw_name_dict[raw_name] = {"fund_name": fund_name, "share_name": share_name} return raw_name_dict + def post_management_fee_exclude_performance_fee(self, data_list: list): + adjust = False + mangement_fee_index_list = self.special_datapoint_feature.get("management_fee_including_performance_fee", {}).\ + get("page_index", []) + if len(mangement_fee_index_list) == 0: + return data_list, adjust + min_page_index = min(mangement_fee_index_list) + performance_fee_item_list = [] + for data_dict in data_list: + page_index = data_dict.get("page_index", -1) + if page_index <= min_page_index: + continue + extract_data = data_dict.get("extract_data", {}) + data = extract_data.get("data", []) + for data_item in data: + keys = list(data_item.keys()) + share_name = data_item.get("share_name", "") + if len(share_name) == 0: + continue + if "performance_fee_costs" in keys: + performance_fee_item_list.append(data_item) + + for data_dict in data_list: + page_index = data_dict.get("page_index", -1) + if page_index not in mangement_fee_index_list: + continue + extract_data = data_dict.get("extract_data", {}) + management_fee_data_list = extract_data.get("data", []) + for management_fee_data in management_fee_data_list: + keys = list(management_fee_data.keys()) + fund_name = management_fee_data.get("fund_name", "") + share_name = management_fee_data.get("share_name", "") + if len(fund_name) == 0 or len(share_name) == 0: + continue + if "management_fee_and_costs" in keys: + management_fee_and_costs = management_fee_data.get("management_fee_and_costs", -1) + try: + management_fee_and_costs = float(management_fee_and_costs) + except: + management_fee_and_costs = -1 + if management_fee_and_costs != -1: + for performance_fee_item in performance_fee_item_list: + pf_fund_name = performance_fee_item.get("fund_name", "") + pf_share_name = performance_fee_item.get("share_name", "") + if pf_fund_name == fund_name and pf_share_name == share_name: + performance_fee_costs = performance_fee_item.get("performance_fee_costs", -1) + try: + performance_fee_costs = float(performance_fee_costs) + except: + performance_fee_costs = -1 + if performance_fee_costs != -1: + management_fee_data["management_fee_and_costs"] = management_fee_and_costs - performance_fee_costs + management_fee_data["management_fee"] = management_fee_data["management_fee_and_costs"] + management_fee_data["source"] = f"subtract_performance_fee_{performance_fee_costs}" + adjust = True + break + return data_list, adjust + def post_adjust_management_fee_costs(self, data_list: list): """ Adjust the management fee and management fee and costs @@ -861,7 +943,7 @@ class DataExtraction: previous_page_datapoints = [] previous_page_fund_name = None for page_num, page_text in self.page_text_dict.items(): - # if page_num not in [13, 14]: + # if page_num not in [37, 38]: # continue if page_num in handled_page_num_list: continue @@ -1249,9 +1331,17 @@ class DataExtraction: except: data = {"data": []} try: - data = self.validate_data(extract_data_info=data, - page_text=page_text, - previous_page_last_fund=previous_page_last_fund) + if self.doc_source == "emea_ar": + data = self.validate_emea_ar_data(extract_data_info=data, + page_text=page_text, + previous_page_last_fund=previous_page_last_fund) + elif self.doc_source == "aus_prospectus": + data = self.validate_aus_prospectus_data(extract_data_info=data, + page_text=page_text, + page_num=page_num, + previous_page_last_fund=previous_page_last_fund) + else: + pass except: pass @@ -1366,7 +1456,12 @@ class DataExtraction: except: data = {"data": []} try: - data = self.validate_data(data, None, previous_page_last_fund) + if self.doc_source == "emea_ar": + data = self.validate_emea_ar_data(data, None, previous_page_last_fund) + elif self.doc_source == "aus_prospectus": + data = self.validate_aus_prospectus_data(data, None, page_num, previous_page_last_fund) + else: + pass except: pass @@ -1405,7 +1500,7 @@ class DataExtraction: # print(text) return text - def validate_data(self, + def validate_emea_ar_data(self, extract_data_info: dict, page_text: str, previous_page_last_fund: str=None) -> dict: @@ -1417,6 +1512,7 @@ class DataExtraction: data_list = extract_data_info.get("data", []) if len(data_list) == 0: return extract_data_info + remove_list = [] performance_fee_regex = r"Amount\s+of\s+the\s+performance\s+fees|Performance\s+Fees\s+amounts|Performance\s+fees\s+amounts|Commissioni\s+di\s+performance|Performance\s+Fee\s+|Performance\s+fees\s+charged" nav_regex = r"based\s+on\s+(the\s+)?NAV|on\s+the\s+Share\s+Class\s+NAV|NAV\s+of\s+performance\s+fee|of\s+the\s+average\s+Net\s+Asset\s+Value|Attivi\s+in\s+gestione|Performance\s+Fee\s+of\s+NAV\s+in|share\s+class\s+dealing\s+NAV" @@ -1436,29 +1532,29 @@ class DataExtraction: if len(keys) == 0: remove_list.append(data) continue - fund_name = data.get("fund name", "").strip() - if fund_name == "": + raw_fund_name = data.get("fund name", "").strip() + if raw_fund_name == "": remove_list.append(data) continue # Clean fund name start if previous_page_last_fund is not None and len(previous_page_last_fund) > 0: previous_page_last_fund = previous_page_last_fund.strip() - if fund_name.startswith(previous_page_last_fund) and fund_name != previous_page_last_fund: - modified_fund_name = fund_name.replace(previous_page_last_fund, "").strip() + if raw_fund_name.startswith(previous_page_last_fund) and raw_fund_name != previous_page_last_fund: + modified_fund_name = raw_fund_name.replace(previous_page_last_fund, "").strip() if len(modified_fund_name.split()) > 1: - fund_name = modified_fund_name - fund_name = self.get_fund_name(fund_name, "Fund") - fund_name = self.get_fund_name(fund_name, "Bond") + raw_fund_name = modified_fund_name + raw_fund_name = self.get_fund_name(raw_fund_name, "Fund") + raw_fund_name = self.get_fund_name(raw_fund_name, "Bond") remove_prefix_list = ["Market Specific Equity Sub-Funds", "International and Regional Equity Sub-Funds", "Equity Sub-Funds"] for remove_item in remove_prefix_list: - if fund_name.startswith(remove_item): - fund_name = fund_name.replace(remove_item, "").strip() + if raw_fund_name.startswith(remove_item): + raw_fund_name = raw_fund_name.replace(remove_item, "").strip() - data["fund name"] = fund_name + data["fund name"] = raw_fund_name # Clean fund name end keys = list(data.keys()) @@ -1472,11 +1568,11 @@ class DataExtraction: if ter_search is not None: include_key_words = True if not include_key_words: - is_share_name = self.check_fund_name_as_share(fund_name) + is_share_name = self.check_fund_name_as_share(raw_fund_name) if not is_share_name: remove_list.append(data) break - data["share name"] = fund_name + data["share name"] = raw_fund_name if data.get(key, "") == "": data.pop(key) for remove_data in remove_list: @@ -1508,8 +1604,8 @@ class DataExtraction: multi_over_3_share_regex = r"([A-Z]{1,}\,\s){3,}" exist_multi_over_3_share = False for data in data_list: - fund_name = data.get("fund name", "").strip() - if len(fund_name) == 0: + raw_fund_name = data.get("fund name", "").strip() + if len(raw_fund_name) == 0: continue raw_share_name = data.get("share name", "") if not exist_multi_over_3_share: @@ -1523,7 +1619,7 @@ class DataExtraction: if len(share_name_list) > 0: for share_name in share_name_list: new_data = {} - new_data["fund_name"] = fund_name + new_data["fund_name"] = raw_fund_name if share_name != "": new_data["share_name"] = share_name ter = data.get("ter", None) @@ -1537,10 +1633,118 @@ class DataExtraction: if key not in ["fund name", "share name", "ter", "performance fees"]: new_data[key] = value new_data_list.append(new_data) - + extract_data_info["data"] = new_data_list return extract_data_info + + def validate_aus_prospectus_data(self, + extract_data_info: dict, + page_text: str, + page_num: int, + previous_page_last_fund: str=None) -> dict: + data_list = extract_data_info.get("data", []) + if len(data_list) == 0: + return extract_data_info + remove_list = [] + for data in data_list: + raw_fund_name = data.get("fund name", "").strip() + if raw_fund_name == "": + remove_list.append(data) + continue + # Clean fund name start + if previous_page_last_fund is not None and len(previous_page_last_fund) > 0: + previous_page_last_fund = previous_page_last_fund.strip() + if raw_fund_name.startswith(previous_page_last_fund) and raw_fund_name != previous_page_last_fund: + modified_fund_name = raw_fund_name.replace(previous_page_last_fund, "").strip() + if len(modified_fund_name.split()) > 1: + raw_fund_name = modified_fund_name + data["fund name"] = raw_fund_name + for remove_data in remove_list: + if remove_data in data_list: + data_list.remove(remove_data) + + new_data_list = [] + multi_over_3_share_regex = r"([A-Z]{1,}\,\s){3,}" + exist_multi_over_3_share = False + for data in data_list: + raw_fund_name = data.get("fund name", "").strip() + if len(raw_fund_name) == 0: + continue + raw_share_name = data.get("share name", "") + if not exist_multi_over_3_share: + multi_over_3_share_search = re.search(multi_over_3_share_regex, raw_share_name) + if multi_over_3_share_search is not None: + exist_multi_over_3_share = True + if exist_multi_over_3_share: + share_name_list = self.split_multi_share_name(raw_share_name) + else: + share_name_list = [raw_share_name] + if len(share_name_list) > 0: + for share_name in share_name_list: + new_data = {} + new_data["fund_name"] = raw_fund_name + if share_name != "": + new_data["share_name"] = share_name + for key, value in data.items(): + if key not in ["fund name", "share name"]: + new_data[key] = value + new_data_list.append(new_data) + extract_data_info["data"] = new_data_list + if page_text is not None and len(page_text) > 0: + self.set_datapoint_feature_properties(new_data_list, page_text, page_num) + return extract_data_info + + def set_datapoint_feature_properties(self, data_list: list, page_text: str, page_num: int) -> None: + for feature, properties in self.special_datapoint_feature_config.items(): + regex_text_list = properties.get("regex_text", []) + if len(regex_text_list) == 0: + continue + effective_datapoints = properties.get("effective_datapoints", []) + if len(effective_datapoints) == 0: + continue + provider_ids = properties.get("provider_ids", []) + if len(provider_ids) > 0: + is_current_provider = False + doc_provider_list = self.document_mapping_info_df["ProviderId"].unique().tolist() + if len(doc_provider_list) > 0: + for provider in provider_ids: + if provider in doc_provider_list: + is_current_provider = True + break + if not is_current_provider: + continue + exclude_datapoints = properties.get("exclude_datapoints", []) + + exist_effective_datapoints = False + exist_exclude_datapoints = False + for data_item in data_list: + datapoints = [datapoint for datapoint in list(data_item.keys()) + if datapoint in effective_datapoints] + if len(datapoints) > 0: + exist_effective_datapoints = True + datapoints = [datapoint for datapoint in list(data_item.keys()) + if datapoint in exclude_datapoints] + if len(datapoints) > 0: + exist_exclude_datapoints = True + if exist_effective_datapoints and exist_exclude_datapoints: + break + + if not exist_effective_datapoints: + continue + if exist_exclude_datapoints: + continue + found_regex_text = False + for regex_text in regex_text_list: + regex_search = re.search(regex_text, page_text) + if regex_search is not None: + found_regex_text = True + break + if found_regex_text: + if self.special_datapoint_feature[feature].get("page_index", None) is None: + self.special_datapoint_feature[feature]["page_index"] = [] + self.special_datapoint_feature[feature]["page_index"].append(page_num) + def split_multi_share_name(self, raw_share_name: str) -> list: """ Some document, e.g. 481482392 diff --git a/instructions/aus_prospectus/data_extraction_prompts_config.json b/instructions/aus_prospectus/data_extraction_prompts_config.json index 642dbd6..2e0d439 100644 --- a/instructions/aus_prospectus/data_extraction_prompts_config.json +++ b/instructions/aus_prospectus/data_extraction_prompts_config.json @@ -448,7 +448,7 @@ "A. Exclude reported name", "Please don't extract data by the reported names for buy_spread or sell_spread, they are: ", "Transaction costs buy/sell spread recovery, Transaction costs reducing return of the investment option (net transaction costs), Cost of product, ", - "Estimated transaction costs offset by buy/sell spreads (% pa), ", + "Estimated transaction costs offset by buy/sell spreads (% pa), Transaction costs", "---Example 1 Start---", "Option name \nTotal estimated \ntransaction costs \n(% pa) \nEstimated transaction costs \noffset by buy/sell spreads \n(% pa) \nEstimated transaction costs \nborne by the option \n(% pa) \nGenerations Defensive \n0.21 \n0.04 \n0.17 \n", "---Example 1 End---", @@ -466,6 +466,13 @@ "---Example 3 End---", "The data is about Cost of product, should be excluded, the output for buy_spread and sell_spread should be:", "{\"data\": []}", + "\n", + "---Example 4 Start---", + "Transaction costs \nOption % of option’s assets* \nHigh Growth 0.03% \nTaken into account in the daily calculation\nof unit prices\nMember activity related fees and costs \nBuy-sell spread Nil N/A\nSwitching fee Nil N/A\n", + "---Example 4 End---", + "According to example, please exclude Transaction costs.", + "\"Buy-sell spread\" data section is under \"Member activity related fees and costs\", the value is Nil, output for buy_spread and sell_spread should be:", + "{\"data\": []}", "B. Simple case with simple table structure:", "---Example 1 Start---", "Investment option Buy cost Sell cost \nLifestyle Growth 0% 0%\nLifestyle Balanced 0% 0%\nProperty 0.10% 0.10%\n", diff --git a/main.py b/main.py index c2e4fed..9cdebf3 100644 --- a/main.py +++ b/main.py @@ -1538,7 +1538,7 @@ if __name__ == "__main__": with open(document_sample_file, "r", encoding="utf-8") as f: special_doc_id_list = [doc_id.strip() for doc_id in f.readlines() if len(doc_id.strip()) > 0] - # special_doc_id_list = ["448576924"] + special_doc_id_list = ["573372424", "455235248", "462780211"] pdf_folder: str = r"/data/aus_prospectus/pdf/" output_pdf_text_folder: str = r"/data/aus_prospectus/output/pdf_text/" output_extract_data_child_folder: str = ( diff --git a/performance.ipynb b/performance.ipynb index 1a2ea6e..4a15f7d 100644 --- a/performance.ipynb +++ b/performance.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 11, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ "path_ground_truth = r\"/data/aus_prospectus/ground_truth/phase2_file/46_documents/46_documents_ground_truth_with_mapping.xlsx\"\n", "# path_ground_truth = r\"/data/aus_prospectus/ground_truth/phase2_file/next_round/next_round_6_documents_ground_truth_with_mapping.xlsx\"\n", "# path_generated_results = r\"/data/aus_prospectus/output/mapping_data/total/mapping_data_info_46_documents_by_text_20250317.xlsx\"\n", - "path_generated_results = r\"/data/aus_prospectus/output/mapping_data/total/mapping_data_info_46_documents_by_text_20250328010350.xlsx\"\n", + "path_generated_results = r\"/data/aus_prospectus/output/mapping_data/total/mapping_data_info_46_documents_by_text_20250328035602.xlsx\"\n", "# path_generated_results = r\"/data/aus_prospectus/output/mapping_data/total/mapping_data_info_6_documents_by_text_20250328004858.xlsx\"\n", "provider_mapping_file_path = r\"/data/aus_prospectus/ground_truth/phase2_file/46_documents/TopProvidersBiz.xlsx\"\n", "\n" @@ -59,7 +59,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -349,7 +349,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -363,56 +363,56 @@ "All Providers Results: \n", "Document List File - None\n", "Metric \tF1-Score \tPrecision \tRecall \tAccuracy \tSUPPORT \tTP \tTN \tFP \tFN \n", - "management_fee_and_costs \t0.9324 \t0.8811 \t0.9901 \t0.8734 \t458 \t400 \t0 \t54 \t4 \n", - "management_fee \t0.9615 \t0.9339 \t0.9907 \t0.9258 \t458 \t424 \t0 \t30 \t4 \n", - "performance_fee_costs \t0.9165 \t0.9088 \t0.9244 \t0.8930 \t306 \t269 \t140 \t27 \t22 \n", - "interposed_vehicle_performance_fee_cost \t0.9536 \t0.9114 \t1.0000 \t0.9847 \t73 \t72 \t379 \t7 \t0 \n", - "administration_fees \t0.9878 \t0.9759 \t1.0000 \t0.9956 \t81 \t81 \t375 \t2 \t0 \n", - "total_annual_dollar_based_charges \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t68 \t68 \t390 \t0 \t0 \n", - "buy_spread \t0.9346 \t0.9081 \t0.9628 \t0.8974 \t377 \t336 \t75 \t34 \t13 \n", - "sell_spread \t0.9331 \t0.9054 \t0.9626 \t0.8952 \t377 \t335 \t75 \t35 \t13 \n", - "minimum_initial_investment \t0.9635 \t0.9814 \t0.9463 \t0.9476 \t335 \t317 \t117 \t6 \t18 \n", - "benchmark_name \t0.9298 \t0.8968 \t0.9653 \t0.9541 \t153 \t139 \t298 \t16 \t5 \n", - "TOTAL \t0.9513 \t0.9303 \t0.9742 \t0.9367 \t2686 \t2441 \t1849 \t211 \t79 \n", - "Total Shares Matched - 411\n", - "Total Shares Not Matched - 106\n", - "Percentage of Shares Matched - 79.49709864603481\n", - "Not Matched Shares Name List - ['SPDR® S&P World ex Australia Carbon Control Fund', 'BT-BlackRock Scientific Diversified Growth', 'Mercer Multi-manager Balanced Fund – Retail Units', 'Mercer Multi-manager Conservative Fund – Retail Units', 'Mercer Multi-manager Growth Fund – Retail Units', 'Mercer Multi-manager High Growth Fund – Retail Units', 'ANZ OA Inv-OnePath Multi Asset Income EF', 'ANZ OA Inv-OnePath Multi Asset Income NEF', 'ANZ OA IP-OP Diversified Credit EF', 'ANZ OA IP-OP Diversified Credit NE', 'OnePath ANZ OA IP-T. Rowe Price Dyna Gl Bond EF', 'OnePath ANZ OA IP-T. Rowe Price Dyna Gl Bond NE', 'OnePath OA Inv-Nikko AM Australian Shares EF', 'OnePath OA Inv-Nikko AM Australian Shares NEF', 'OnePath OA IP- Pendal Monthly Income Plus-EF/Sel', 'OnePath OA IP-ANZ Cash Advantage-EF/Sel', 'OnePath OA IP-ANZ Cash Advantage-NEF', 'OnePath OA IP-Bentham Global Income Trust-EF/Sel', 'OnePath OA IP-Bentham Global Income Trust-NEF', 'OnePath OA IP-Kapstream Absolute Return Income Trust-EF/Sel', 'OnePath OA IP-Kapstream Absolute Return Income Trust-NEF', 'OnePath OA IP-OnePath Active Growth Trust-NEF', 'OnePath OA IP-OnePath High Growth Trust-EF/Sel', 'OnePath OA IP-OnePath High Growth Trust-NEF', 'OnePath OA IP-OnePath Managed Growth Trust-EF/Sel', 'OnePath OA IP-OnePath Managed Growth Trust-NEF', 'OnePath OA IP-OptiMix Australian Fixed Interest Trust-EF/Sel', 'OnePath OA IP-OptiMix Australian Fixed Interest Trust-NEF', 'OnePath OA IP-OptiMix Australian Share Trust-EF/Sel', 'OnePath OA IP-OptiMix Australian Share Trust-NEF', 'OnePath OA IP-OptiMix Global Emerging Markets Share-EF/Sel', 'OnePath OA IP-OptiMix Global Emerging Markets Share-NEF', 'OnePath OA IP-OptiMIx Global Share Trust-EF/Sel', 'OnePath OA IP-OptiMIx Global Share Trust-NEF', 'OnePath OA IP-OptiMix High Growth Trust-EF/Sel', 'OnePath OA IP-OptiMix High Growth Trust-NEF', 'OnePath OA IP-OptiMix Property Securities Trust-EF/Sel', 'OnePath OA IP-OptiMix Property Securities Trust-NEF', 'OnePath OA IP-Perpetual Conservative Growth Trust-EF/Sel', 'OnePath OA IP-Perpetual Conservative Growth Trust-NEF', 'OnePath OA IP-Platinum International Trust-EF/Sel', 'OnePath OA IP-Platinum International Trust-NEF', 'OnePath OA IP-Schroder Fixed Income-EF/Sel', 'OnePath OA IP-Schroder Fixed Income-NEF', 'OnePath OA IP-UBS Defensive Trust-EF/Sel', 'OnePath OA IP-UBS Defensive Trust-NEF', 'OnePath OA IP-UBS Diversified Fixed Income Trust-EF/Sel', 'OnePath OA IP-UBS Diversified Fixed Income Trust-NEF', 'OnePath OneAnswer Investment Portfolio - Ardea Real Outcome -EF/Sel', 'OnePath OneAnswer Investment Portfolio - Ardea Real Outcome -NE', 'OnePath OneAnswer Investment Portfolio - Barrow Hanley Concentrated Global Shares Hedged -EF/Sel', 'OnePath OneAnswer Investment Portfolio - Barrow Hanley Concentrated Global Shares Hedged -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Balanced Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Balanced Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Conservative Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Conservative Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Diversified Bond Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Diversified Bond Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath International Shares Index (Hedged) -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath International Shares Index (Hedged) -NE', 'OnePath Schroder Real Return Trust (Entry Fee)', 'OnePath Schroder Real Return Trust (Nil Entry Fee)', 'Telstra Growth Pen', 'First Sentier Concentrated Aus Share', 'First Sentier Australian Small Companies', 'First Sentier Imputation', 'First Sentier Global Property Securities', 'First Sentier Australian Share', 'CFS FC-Investors Mutual Future Leaders', 'Stewart Worldwide Leaders Sustainability', 'First Sentier Property Securities', 'MyNorth Index Defensive', 'MLC MKPFPR - Altrinsic Global Eq Trust', 'MLC MKPFPR - BlackRock Global Allocation', 'MLC MKPF - Hedged Global Share Fund', 'MLC MKPF - Inflation Plus - Conservative', 'MLC MKPFPR - MLC - Platinum Global Fund', 'MLC MasterKey Pension Fundamentals - Perpetual Australian Share', 'MLC MasterKey Super Fundamentals - Perpetual Australian Share', 'MLC MKPF - Perpetual WS Ethical SRI Fund', 'MLC MKSF - Perpetual WS Ethical SRI Fund', 'MLC MasterKey Pension Fundamentals (Pre Retirement) - Perpetual Smll Co Fund No.2', 'MLC MasterKey Super Fundamentals - Perpetual Small Co Fund No.2', 'MLC MKPF - PIMCO Div. Fixed Interest Wholesale Class', 'MLC MKSF - PIMCO Div. Fixed Interest Wholesale Class', 'MLC MKPF - PIMCO Global Bond Wholesale Class', 'MLC MKPFPR - Platinum Asia Fund', 'MLC MKSF - Platinum Asia Fund', 'MLC MKPF - Platinum International Fund', 'MLC MKSF - Platinum International Fund', 'MLC MKPF - PM CAPITAL Global Companies', 'MLC MKSF - PM CAPITAL Global Companies', 'MLC MKPF - Schroder WS Australian Equity', 'MLC MKSF - Schroder WS Australian Equity', 'MLC MasterKey Pension Fundamentals (Pre Retirement) - MLC Aust Property Index', 'MLC MasterKey Super Fundamentals - MLC Australian Property Index', 'MLC MKSF - Vanguard Intl Shr Indx (Hgd)', 'MLC MKSF - Vanguard Intl Shr Indx', 'HOSTPLUS Fixed Interest Indexed Super', 'Australian Unity Inv Wholesale Deposits Fund', 'Lifeplan Investment Bond Lifeplan Capital Guaranteed', 'Lifeplan Investment Bond MLC Horizon 2-Capital Stable Open', 'Dimensional Australian Core Equity Trust', 'CFS MIF-Geared Share NEF', 'BT Imputation Shares Retail', 'Dimensional Australia Core Equity Trust - Active ETF']\n", + "management_fee_and_costs \t0.9488 \t0.9148 \t0.9855 \t0.9031 \t452 \t408 \t2 \t38 \t6 \n", + "management_fee \t0.9657 \t0.9462 \t0.9860 \t0.9339 \t452 \t422 \t2 \t24 \t6 \n", + "performance_fee_costs \t0.9119 \t0.8859 \t0.9395 \t0.8877 \t302 \t264 \t139 \t34 \t17 \n", + "interposed_vehicle_performance_fee_cost \t0.9172 \t0.8471 \t1.0000 \t0.9714 \t73 \t72 \t369 \t13 \t0 \n", + "administration_fees \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t69 \t69 \t385 \t0 \t0 \n", + "total_annual_dollar_based_charges \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t62 \t62 \t392 \t0 \t0 \n", + "buy_spread \t0.9569 \t0.9342 \t0.9807 \t0.9295 \t380 \t355 \t67 \t25 \t7 \n", + "sell_spread \t0.9569 \t0.9342 \t0.9807 \t0.9295 \t380 \t355 \t67 \t25 \t7 \n", + "minimum_initial_investment \t0.9738 \t0.9814 \t0.9664 \t0.9626 \t327 \t316 \t121 \t6 \t11 \n", + "benchmark_name \t0.9250 \t0.8970 \t0.9548 \t0.9471 \t166 \t148 \t282 \t17 \t7 \n", + "TOTAL \t0.9556 \t0.9341 \t0.9794 \t0.9465 \t2663 \t2471 \t1826 \t182 \t61 \n", + "Total Shares Matched - 406\n", + "Total Shares Not Matched - 101\n", + "Percentage of Shares Matched - 80.07889546351085\n", + "Not Matched Shares Name List - ['SPDR® S&P World ex Australia Carbon Control Fund', 'Mercer Multi-manager Balanced Fund – Retail Units', 'Mercer Multi-manager Conservative Fund – Retail Units', 'Mercer Multi-manager Growth Fund – Retail Units', 'Mercer Multi-manager High Growth Fund – Retail Units', 'ANZ OA IP-OP Diversified Credit EF', 'ANZ OA IP-OP Diversified Credit NE', 'OnePath ANZ OA IP-T. Rowe Price Dyna Gl Bond EF', 'OnePath ANZ OA IP-T. Rowe Price Dyna Gl Bond NE', 'OnePath OA IP- Pendal Monthly Income Plus-EF/Sel', 'OnePath OA IP-ANZ Cash Advantage-EF/Sel', 'OnePath OA IP-ANZ Cash Advantage-NEF', 'OnePath OA IP-Ausbil Australian Emerging Leaders Trust-EF/Sel', 'OnePath OA IP-Bentham Global Income Trust-EF/Sel', 'OnePath OA IP-Bentham Global Income Trust-NEF', 'OnePath OA IP-Kapstream Absolute Return Income Trust-EF/Sel', 'OnePath OA IP-Kapstream Absolute Return Income Trust-NEF', 'OnePath OA IP-OnePath Active Growth Trust-NEF', 'OnePath OA IP-OnePath High Growth Trust-EF/Sel', 'OnePath OA IP-OnePath High Growth Trust-NEF', 'OnePath OA IP-OnePath Managed Growth Trust-EF/Sel', 'OnePath OA IP-OnePath Managed Growth Trust-NEF', 'OnePath OA IP-OptiMix Australian Fixed Interest Trust-EF/Sel', 'OnePath OA IP-OptiMix Australian Fixed Interest Trust-NEF', 'OnePath OA IP-OptiMix Australian Share Trust-EF/Sel', 'OnePath OA IP-OptiMix Australian Share Trust-NEF', 'OnePath OA IP-OptiMix Global Emerging Markets Share-EF/Sel', 'OnePath OA IP-OptiMix Global Emerging Markets Share-NEF', 'OnePath OA IP-OptiMIx Global Share Trust-EF/Sel', 'OnePath OA IP-OptiMIx Global Share Trust-NEF', 'OnePath OA IP-OptiMix High Growth Trust-EF/Sel', 'OnePath OA IP-OptiMix High Growth Trust-NEF', 'OnePath OA IP-OptiMix Property Securities Trust-EF/Sel', 'OnePath OA IP-OptiMix Property Securities Trust-NEF', 'OnePath OA IP-Perpetual Balanced Growth Trust-EF/Sel', 'OnePath OA IP-Perpetual Balanced Growth Trust-NEF', 'OnePath OA IP-Perpetual Conservative Growth Trust-EF/Sel', 'OnePath OA IP-Perpetual Conservative Growth Trust-NEF', 'OnePath OA IP-Platinum International Trust-EF/Sel', 'OnePath OA IP-Platinum International Trust-NEF', 'OnePath OA IP-UBS Balanced Trust-EF/Sel', 'OnePath OA IP-UBS Balanced Trust-NEF', 'OnePath OA IP-UBS Defensive Trust-EF/Sel', 'OnePath OA IP-UBS Defensive Trust-NEF', 'OnePath OA IP-UBS Diversified Fixed Income Trust-EF/Sel', 'OnePath OA IP-UBS Diversified Fixed Income Trust-NEF', 'OnePath OneAnswer Investment Portfolio - Ardea Real Outcome -EF/Sel', 'OnePath OneAnswer Investment Portfolio - Ardea Real Outcome -NE', 'OnePath OneAnswer Investment Portfolio - Barrow Hanley Concentrated Global Shares Hedged -EF/Sel', 'OnePath OneAnswer Investment Portfolio - Barrow Hanley Concentrated Global Shares Hedged -NE', 'OnePath OneAnswer Investment Portfolio - BlackRock Advantage Australian Equity -EF/Sel', 'OnePath OneAnswer Investment Portfolio - BlackRock Advantage Australian Equity -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Balanced Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Balanced Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Conservative Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Conservative Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Diversified Bond Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Diversified Bond Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath International Shares Index (Hedged) -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath International Shares Index (Hedged) -NE', 'OnePath OA IP-Ausbil Australian Emerging Leaders Trust-NEF', 'Telstra Growth Pen', 'Platinum Japan Fund P Class', 'MyNorth Index Defensive', 'MLC MKPFPR - Altrinsic Global Eq Trust', 'MLC MKPFPR - BlackRock Global Allocation', 'MLC MKPF - Inflation Plus - Conservative', 'MLC MKPFPR - MLC - Platinum Global Fund', 'MLC MasterKey Pension Fundamentals - Perpetual Australian Share', 'MLC MasterKey Super Fundamentals - Perpetual Australian Share', 'MLC MKPF - Perpetual WS Ethical SRI Fund', 'MLC MKSF - Perpetual WS Ethical SRI Fund', 'MLC MasterKey Pension Fundamentals (Pre Retirement) - Perpetual Smll Co Fund No.2', 'MLC MasterKey Super Fundamentals - Perpetual Small Co Fund No.2', 'MLC MKSF - PIMCO Div. Fixed Interest Wholesale Class', 'MLC MKPFPR - Platinum Asia Fund', 'MLC MKSF - Platinum Asia Fund', 'MLC MKPF - Platinum International Fund', 'MLC MKSF - Platinum International Fund', 'MLC MKPF - PM CAPITAL Global Companies', 'MLC MKSF - PM CAPITAL Global Companies', 'MLC MKPF - Schroder WS Australian Equity', 'MLC MKSF - Schroder WS Australian Equity', 'MLC MasterKey Pension Fundamentals (Pre Retirement) - MLC Aust Property Index', 'MLC MasterKey Super Fundamentals - MLC Australian Property Index', 'MLC MKSF - Vanguard Intl Shr Indx (Hgd)', 'MLC MKSF - Vanguard Intl Shr Indx', 'Lifeplan Investment Bond Perpetual Balanced Growth', 'Lifeplan Investment Bond Perpetual Conservative Growth', 'Lifeplan Investment Bond Perpetual Industrial Share', 'Lifeplan Investment Bond Vanguard® Australian Shares Index', 'Dimensional Australian Core Equity Trust', 'CFS FC ESup-CFS Diversified Fix Int', 'FC W Pen-CFS TTR Australian Share', 'FC W Pen-CFS TTR Property Securities', 'FC W Pen-CFS TTR Australian Small Companies', 'FC W Pen-CFS TTR Global Infrastructure Securities', 'FC W Pen-CFS TTR Global Share', 'FC W Pen-CFS TTR Emerging Markets', 'CFS MIF-Geared Share NEF', 'Dimensional Australia Core Equity Trust - Active ETF']\n", "All Providers Results: \n", "Document List File - ./sample_documents/aus_prospectus_29_documents_sample.txt\n", "Metric \tF1-Score \tPrecision \tRecall \tAccuracy \tSUPPORT \tTP \tTN \tFP \tFN \n", - "management_fee_and_costs \t0.9505 \t0.9058 \t1.0000 \t0.9058 \t191 \t173 \t0 \t18 \t0 \n", - "management_fee \t0.9867 \t0.9738 \t1.0000 \t0.9738 \t191 \t186 \t0 \t5 \t0 \n", - "performance_fee_costs \t0.8832 \t0.8700 \t0.8969 \t0.8796 \t99 \t87 \t81 \t13 \t10 \n", - "interposed_vehicle_performance_fee_cost \t0.9369 \t0.8814 \t1.0000 \t0.9634 \t53 \t52 \t132 \t7 \t0 \n", - "administration_fees \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t15 \t15 \t176 \t0 \t0 \n", - "buy_spread \t0.9812 \t0.9683 \t0.9946 \t0.9634 \t189 \t183 \t1 \t6 \t1 \n", - "sell_spread \t0.9757 \t0.9577 \t0.9945 \t0.9529 \t189 \t181 \t1 \t8 \t1 \n", - "minimum_initial_investment \t0.9189 \t0.9577 \t0.8831 \t0.8743 \t154 \t136 \t31 \t6 \t18 \n", - "benchmark_name \t0.9271 \t0.8812 \t0.9780 \t0.9267 \t99 \t89 \t88 \t12 \t2 \n", - "TOTAL \t0.9512 \t0.9329 \t0.9719 \t0.9378 \t1180 \t1102 \t510 \t75 \t111 \n", - "Total Shares Matched - 186\n", - "Total Shares Not Matched - 4\n", - "Percentage of Shares Matched - 97.89473684210527\n", - "Not Matched Shares Name List - ['Dimensional Australian Core Equity Trust', 'CFS MIF-Geared Share NEF', 'BT Imputation Shares Retail', 'Dimensional Australia Core Equity Trust - Active ETF']\n", + "management_fee_and_costs \t0.9638 \t0.9301 \t1.0000 \t0.9301 \t186 \t173 \t0 \t13 \t0 \n", + "management_fee \t0.9919 \t0.9839 \t1.0000 \t0.9839 \t186 \t183 \t0 \t3 \t0 \n", + "performance_fee_costs \t0.8955 \t0.8738 \t0.9184 \t0.8871 \t100 \t90 \t75 \t13 \t8 \n", + "interposed_vehicle_performance_fee_cost \t0.8889 \t0.8000 \t1.0000 \t0.9301 \t53 \t52 \t121 \t13 \t0 \n", + "administration_fees \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t9 \t9 \t177 \t0 \t0 \n", + "buy_spread \t0.9891 \t0.9784 \t1.0000 \t0.9785 \t184 \t181 \t1 \t4 \t0 \n", + "sell_spread \t0.9807 \t0.9622 \t1.0000 \t0.9624 \t184 \t178 \t1 \t7 \t0 \n", + "minimum_initial_investment \t0.9420 \t0.9583 \t0.9262 \t0.9086 \t149 \t138 \t31 \t6 \t11 \n", + "benchmark_name \t0.9271 \t0.8812 \t0.9780 \t0.9247 \t100 \t89 \t83 \t12 \t2 \n", + "TOTAL \t0.9532 \t0.9298 \t0.9803 \t0.9450 \t1151 \t1093 \t489 \t71 \t82 \n", + "Total Shares Matched - 181\n", + "Total Shares Not Matched - 10\n", + "Percentage of Shares Matched - 94.76439790575915\n", + "Not Matched Shares Name List - ['Dimensional Australian Core Equity Trust', 'CFS FC ESup-CFS Diversified Fix Int', 'FC W Pen-CFS TTR Australian Share', 'FC W Pen-CFS TTR Property Securities', 'FC W Pen-CFS TTR Australian Small Companies', 'FC W Pen-CFS TTR Global Infrastructure Securities', 'FC W Pen-CFS TTR Global Share', 'FC W Pen-CFS TTR Emerging Markets', 'CFS MIF-Geared Share NEF', 'Dimensional Australia Core Equity Trust - Active ETF']\n", "All Providers Results: \n", "Document List File - ./sample_documents/aus_prospectus_17_documents_sample.txt\n", "Metric \tF1-Score \tPrecision \tRecall \tAccuracy \tSUPPORT \tTP \tTN \tFP \tFN \n", - "management_fee_and_costs \t0.9190 \t0.8631 \t0.9827 \t0.8502 \t267 \t227 \t0 \t36 \t4 \n", - "management_fee \t0.9426 \t0.9049 \t0.9835 \t0.8914 \t267 \t238 \t0 \t25 \t4 \n", - "performance_fee_costs \t0.9333 \t0.9286 \t0.9381 \t0.9026 \t207 \t182 \t59 \t14 \t12 \n", - "interposed_vehicle_performance_fee_cost \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t20 \t20 \t247 \t0 \t0 \n", - "administration_fees \t0.9851 \t0.9706 \t1.0000 \t0.9925 \t66 \t66 \t199 \t2 \t0 \n", - "total_annual_dollar_based_charges \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t68 \t68 \t199 \t0 \t0 \n", - "buy_spread \t0.8844 \t0.8453 \t0.9273 \t0.8502 \t188 \t153 \t74 \t28 \t12 \n", - "sell_spread \t0.8876 \t0.8508 \t0.9277 \t0.8539 \t188 \t154 \t74 \t27 \t12 \n", - "minimum_initial_investment \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t181 \t181 \t86 \t0 \t0 \n", - "benchmark_name \t0.9346 \t0.9259 \t0.9434 \t0.9738 \t54 \t50 \t210 \t4 \t3 \n", - "TOTAL \t0.9487 \t0.9289 \t0.9703 \t0.9315 \t1506 \t1339 \t1148 \t136 \t158 \n", - "Total Shares Matched - 267\n", - "Total Shares Not Matched - 102\n", - "Percentage of Shares Matched - 72.35772357723577\n", - "Not Matched Shares Name List - ['SPDR® S&P World ex Australia Carbon Control Fund', 'BT-BlackRock Scientific Diversified Growth', 'Mercer Multi-manager Balanced Fund – Retail Units', 'Mercer Multi-manager Conservative Fund – Retail Units', 'Mercer Multi-manager Growth Fund – Retail Units', 'Mercer Multi-manager High Growth Fund – Retail Units', 'ANZ OA Inv-OnePath Multi Asset Income EF', 'ANZ OA Inv-OnePath Multi Asset Income NEF', 'ANZ OA IP-OP Diversified Credit EF', 'ANZ OA IP-OP Diversified Credit NE', 'OnePath ANZ OA IP-T. Rowe Price Dyna Gl Bond EF', 'OnePath ANZ OA IP-T. Rowe Price Dyna Gl Bond NE', 'OnePath OA Inv-Nikko AM Australian Shares EF', 'OnePath OA Inv-Nikko AM Australian Shares NEF', 'OnePath OA IP- Pendal Monthly Income Plus-EF/Sel', 'OnePath OA IP-ANZ Cash Advantage-EF/Sel', 'OnePath OA IP-ANZ Cash Advantage-NEF', 'OnePath OA IP-Bentham Global Income Trust-EF/Sel', 'OnePath OA IP-Bentham Global Income Trust-NEF', 'OnePath OA IP-Kapstream Absolute Return Income Trust-EF/Sel', 'OnePath OA IP-Kapstream Absolute Return Income Trust-NEF', 'OnePath OA IP-OnePath Active Growth Trust-NEF', 'OnePath OA IP-OnePath High Growth Trust-EF/Sel', 'OnePath OA IP-OnePath High Growth Trust-NEF', 'OnePath OA IP-OnePath Managed Growth Trust-EF/Sel', 'OnePath OA IP-OnePath Managed Growth Trust-NEF', 'OnePath OA IP-OptiMix Australian Fixed Interest Trust-EF/Sel', 'OnePath OA IP-OptiMix Australian Fixed Interest Trust-NEF', 'OnePath OA IP-OptiMix Australian Share Trust-EF/Sel', 'OnePath OA IP-OptiMix Australian Share Trust-NEF', 'OnePath OA IP-OptiMix Global Emerging Markets Share-EF/Sel', 'OnePath OA IP-OptiMix Global Emerging Markets Share-NEF', 'OnePath OA IP-OptiMIx Global Share Trust-EF/Sel', 'OnePath OA IP-OptiMIx Global Share Trust-NEF', 'OnePath OA IP-OptiMix High Growth Trust-EF/Sel', 'OnePath OA IP-OptiMix High Growth Trust-NEF', 'OnePath OA IP-OptiMix Property Securities Trust-EF/Sel', 'OnePath OA IP-OptiMix Property Securities Trust-NEF', 'OnePath OA IP-Perpetual Conservative Growth Trust-EF/Sel', 'OnePath OA IP-Perpetual Conservative Growth Trust-NEF', 'OnePath OA IP-Platinum International Trust-EF/Sel', 'OnePath OA IP-Platinum International Trust-NEF', 'OnePath OA IP-Schroder Fixed Income-EF/Sel', 'OnePath OA IP-Schroder Fixed Income-NEF', 'OnePath OA IP-UBS Defensive Trust-EF/Sel', 'OnePath OA IP-UBS Defensive Trust-NEF', 'OnePath OA IP-UBS Diversified Fixed Income Trust-EF/Sel', 'OnePath OA IP-UBS Diversified Fixed Income Trust-NEF', 'OnePath OneAnswer Investment Portfolio - Ardea Real Outcome -EF/Sel', 'OnePath OneAnswer Investment Portfolio - Ardea Real Outcome -NE', 'OnePath OneAnswer Investment Portfolio - Barrow Hanley Concentrated Global Shares Hedged -EF/Sel', 'OnePath OneAnswer Investment Portfolio - Barrow Hanley Concentrated Global Shares Hedged -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Balanced Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Balanced Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Conservative Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Conservative Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Diversified Bond Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Diversified Bond Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath International Shares Index (Hedged) -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath International Shares Index (Hedged) -NE', 'OnePath Schroder Real Return Trust (Entry Fee)', 'OnePath Schroder Real Return Trust (Nil Entry Fee)', 'Telstra Growth Pen', 'First Sentier Concentrated Aus Share', 'First Sentier Australian Small Companies', 'First Sentier Imputation', 'First Sentier Global Property Securities', 'First Sentier Australian Share', 'CFS FC-Investors Mutual Future Leaders', 'Stewart Worldwide Leaders Sustainability', 'First Sentier Property Securities', 'MyNorth Index Defensive', 'MLC MKPFPR - Altrinsic Global Eq Trust', 'MLC MKPFPR - BlackRock Global Allocation', 'MLC MKPF - Hedged Global Share Fund', 'MLC MKPF - Inflation Plus - Conservative', 'MLC MKPFPR - MLC - Platinum Global Fund', 'MLC MasterKey Pension Fundamentals - Perpetual Australian Share', 'MLC MasterKey Super Fundamentals - Perpetual Australian Share', 'MLC MKPF - Perpetual WS Ethical SRI Fund', 'MLC MKSF - Perpetual WS Ethical SRI Fund', 'MLC MasterKey Pension Fundamentals (Pre Retirement) - Perpetual Smll Co Fund No.2', 'MLC MasterKey Super Fundamentals - Perpetual Small Co Fund No.2', 'MLC MKPF - PIMCO Div. Fixed Interest Wholesale Class', 'MLC MKSF - PIMCO Div. Fixed Interest Wholesale Class', 'MLC MKPF - PIMCO Global Bond Wholesale Class', 'MLC MKPFPR - Platinum Asia Fund', 'MLC MKSF - Platinum Asia Fund', 'MLC MKPF - Platinum International Fund', 'MLC MKSF - Platinum International Fund', 'MLC MKPF - PM CAPITAL Global Companies', 'MLC MKSF - PM CAPITAL Global Companies', 'MLC MKPF - Schroder WS Australian Equity', 'MLC MKSF - Schroder WS Australian Equity', 'MLC MasterKey Pension Fundamentals (Pre Retirement) - MLC Aust Property Index', 'MLC MasterKey Super Fundamentals - MLC Australian Property Index', 'MLC MKSF - Vanguard Intl Shr Indx (Hgd)', 'MLC MKSF - Vanguard Intl Shr Indx', 'HOSTPLUS Fixed Interest Indexed Super', 'Australian Unity Inv Wholesale Deposits Fund', 'Lifeplan Investment Bond Lifeplan Capital Guaranteed', 'Lifeplan Investment Bond MLC Horizon 2-Capital Stable Open']\n" + "management_fee_and_costs \t0.9381 \t0.9038 \t0.9751 \t0.8843 \t266 \t235 \t2 \t25 \t6 \n", + "management_fee \t0.9465 \t0.9192 \t0.9755 \t0.8993 \t266 \t239 \t2 \t21 \t6 \n", + "performance_fee_costs \t0.9206 \t0.8923 \t0.9508 \t0.8881 \t202 \t174 \t64 \t21 \t9 \n", + "interposed_vehicle_performance_fee_cost \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t20 \t20 \t248 \t0 \t0 \n", + "administration_fees \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t60 \t60 \t208 \t0 \t0 \n", + "total_annual_dollar_based_charges \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t62 \t62 \t206 \t0 \t0 \n", + "buy_spread \t0.9255 \t0.8923 \t0.9613 \t0.8955 \t196 \t174 \t66 \t21 \t7 \n", + "sell_spread \t0.9340 \t0.9077 \t0.9620 \t0.9067 \t196 \t177 \t66 \t18 \t7 \n", + "minimum_initial_investment \t1.0000 \t1.0000 \t1.0000 \t1.0000 \t178 \t178 \t90 \t0 \t0 \n", + "benchmark_name \t0.9219 \t0.9219 \t0.9219 \t0.9627 \t66 \t59 \t199 \t5 \t5 \n", + "TOTAL \t0.9587 \t0.9437 \t0.9747 \t0.9437 \t1512 \t1378 \t1151 \t111 \t122 \n", + "Total Shares Matched - 268\n", + "Total Shares Not Matched - 91\n", + "Percentage of Shares Matched - 74.65181058495823\n", + "Not Matched Shares Name List - ['SPDR® S&P World ex Australia Carbon Control Fund', 'Mercer Multi-manager Balanced Fund – Retail Units', 'Mercer Multi-manager Conservative Fund – Retail Units', 'Mercer Multi-manager Growth Fund – Retail Units', 'Mercer Multi-manager High Growth Fund – Retail Units', 'ANZ OA IP-OP Diversified Credit EF', 'ANZ OA IP-OP Diversified Credit NE', 'OnePath ANZ OA IP-T. Rowe Price Dyna Gl Bond EF', 'OnePath ANZ OA IP-T. Rowe Price Dyna Gl Bond NE', 'OnePath OA IP- Pendal Monthly Income Plus-EF/Sel', 'OnePath OA IP-ANZ Cash Advantage-EF/Sel', 'OnePath OA IP-ANZ Cash Advantage-NEF', 'OnePath OA IP-Ausbil Australian Emerging Leaders Trust-EF/Sel', 'OnePath OA IP-Bentham Global Income Trust-EF/Sel', 'OnePath OA IP-Bentham Global Income Trust-NEF', 'OnePath OA IP-Kapstream Absolute Return Income Trust-EF/Sel', 'OnePath OA IP-Kapstream Absolute Return Income Trust-NEF', 'OnePath OA IP-OnePath Active Growth Trust-NEF', 'OnePath OA IP-OnePath High Growth Trust-EF/Sel', 'OnePath OA IP-OnePath High Growth Trust-NEF', 'OnePath OA IP-OnePath Managed Growth Trust-EF/Sel', 'OnePath OA IP-OnePath Managed Growth Trust-NEF', 'OnePath OA IP-OptiMix Australian Fixed Interest Trust-EF/Sel', 'OnePath OA IP-OptiMix Australian Fixed Interest Trust-NEF', 'OnePath OA IP-OptiMix Australian Share Trust-EF/Sel', 'OnePath OA IP-OptiMix Australian Share Trust-NEF', 'OnePath OA IP-OptiMix Global Emerging Markets Share-EF/Sel', 'OnePath OA IP-OptiMix Global Emerging Markets Share-NEF', 'OnePath OA IP-OptiMIx Global Share Trust-EF/Sel', 'OnePath OA IP-OptiMIx Global Share Trust-NEF', 'OnePath OA IP-OptiMix High Growth Trust-EF/Sel', 'OnePath OA IP-OptiMix High Growth Trust-NEF', 'OnePath OA IP-OptiMix Property Securities Trust-EF/Sel', 'OnePath OA IP-OptiMix Property Securities Trust-NEF', 'OnePath OA IP-Perpetual Balanced Growth Trust-EF/Sel', 'OnePath OA IP-Perpetual Balanced Growth Trust-NEF', 'OnePath OA IP-Perpetual Conservative Growth Trust-EF/Sel', 'OnePath OA IP-Perpetual Conservative Growth Trust-NEF', 'OnePath OA IP-Platinum International Trust-EF/Sel', 'OnePath OA IP-Platinum International Trust-NEF', 'OnePath OA IP-UBS Balanced Trust-EF/Sel', 'OnePath OA IP-UBS Balanced Trust-NEF', 'OnePath OA IP-UBS Defensive Trust-EF/Sel', 'OnePath OA IP-UBS Defensive Trust-NEF', 'OnePath OA IP-UBS Diversified Fixed Income Trust-EF/Sel', 'OnePath OA IP-UBS Diversified Fixed Income Trust-NEF', 'OnePath OneAnswer Investment Portfolio - Ardea Real Outcome -EF/Sel', 'OnePath OneAnswer Investment Portfolio - Ardea Real Outcome -NE', 'OnePath OneAnswer Investment Portfolio - Barrow Hanley Concentrated Global Shares Hedged -EF/Sel', 'OnePath OneAnswer Investment Portfolio - Barrow Hanley Concentrated Global Shares Hedged -NE', 'OnePath OneAnswer Investment Portfolio - BlackRock Advantage Australian Equity -EF/Sel', 'OnePath OneAnswer Investment Portfolio - BlackRock Advantage Australian Equity -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Balanced Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Balanced Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Conservative Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Conservative Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath Diversified Bond Index -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath Diversified Bond Index -NE', 'OnePath OneAnswer Investment Portfolio - OnePath International Shares Index (Hedged) -EF/Sel', 'OnePath OneAnswer Investment Portfolio - OnePath International Shares Index (Hedged) -NE', 'OnePath OA IP-Ausbil Australian Emerging Leaders Trust-NEF', 'Telstra Growth Pen', 'Platinum Japan Fund P Class', 'MyNorth Index Defensive', 'MLC MKPFPR - Altrinsic Global Eq Trust', 'MLC MKPFPR - BlackRock Global Allocation', 'MLC MKPF - Inflation Plus - Conservative', 'MLC MKPFPR - MLC - Platinum Global Fund', 'MLC MasterKey Pension Fundamentals - Perpetual Australian Share', 'MLC MasterKey Super Fundamentals - Perpetual Australian Share', 'MLC MKPF - Perpetual WS Ethical SRI Fund', 'MLC MKSF - Perpetual WS Ethical SRI Fund', 'MLC MasterKey Pension Fundamentals (Pre Retirement) - Perpetual Smll Co Fund No.2', 'MLC MasterKey Super Fundamentals - Perpetual Small Co Fund No.2', 'MLC MKSF - PIMCO Div. Fixed Interest Wholesale Class', 'MLC MKPFPR - Platinum Asia Fund', 'MLC MKSF - Platinum Asia Fund', 'MLC MKPF - Platinum International Fund', 'MLC MKSF - Platinum International Fund', 'MLC MKPF - PM CAPITAL Global Companies', 'MLC MKSF - PM CAPITAL Global Companies', 'MLC MKPF - Schroder WS Australian Equity', 'MLC MKSF - Schroder WS Australian Equity', 'MLC MasterKey Pension Fundamentals (Pre Retirement) - MLC Aust Property Index', 'MLC MasterKey Super Fundamentals - MLC Australian Property Index', 'MLC MKSF - Vanguard Intl Shr Indx (Hgd)', 'MLC MKSF - Vanguard Intl Shr Indx', 'Lifeplan Investment Bond Perpetual Balanced Growth', 'Lifeplan Investment Bond Perpetual Conservative Growth', 'Lifeplan Investment Bond Perpetual Industrial Share', 'Lifeplan Investment Bond Vanguard® Australian Shares Index']\n" ] } ],